ArduWiki
glcotiwg_wiki
https://arduwiki.perut.org/index.php/P%C3%A1gina_principal
MediaWiki 1.27.7
case-sensitive
Medio
Especial
Discusión
Usuario
Usuario discusión
ArduWiki
ArduWiki discusión
Archivo
Archivo discusión
MediaWiki
MediaWiki discusión
Plantilla
Plantilla discusión
Ayuda
Ayuda discusión
Categoría
Categoría discusión
ADXL3xx
0
253
3737
1029
2019-05-06T22:09:04Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Sensores</categorytree>
== Referencias ==
[[Category:Sensores]]
phrz68vyt00mk72xrwh41yn8g07pld8
ASCII table
0
231
3895
3741
2019-05-12T22:01:13Z
Kike GL
2
/* Salida */
wikitext
text/x-wiki
Este ejemplo demuestra las funciones avanzadas de impresión en serie al generar en el monitor serie del Software Arduino (IDE) una tabla de caracteres y sus valores ASCII en decimal, hexadecimal, octal y binario. Para más información sobre ASCII, vea [http://www.asciitable.com%20and%20http//en.wikipedia.org/wiki/ASCII asciitable.com]
== Placa aplicable ==
Todas.
== Los caracteres de control ==
Aquí tenemos una lista de los caracteres de control disponibles según el código ASCII.
{| class="wikitable col2cen col4cen"
|+Mapa caracteres Tabla ASCII
!Simbolo!!dec!!Significado!!Arduino
|-
||NULL||0||Caracter nulo||\0
|-
||SOH||1||Start of Heading||\1
|-
||STX||2||Start of text||\2
|-
||ETX||3||End of Text||
|-
||EOT||4||End Of Transmision||
|-
||ENQ||5||Enquiry||
|-
||ACK||6||Ackmowledge||
|-
||BEL||7||Bell||\a
|-
||BS||8||Backspace||
|-
||HT||9||Horizontal Tabulation||\t
|-
||LF||10||Line Feed||\n
|-
||VT||11||Vertical Tabulation||\v
|-
||FF||12||Form Feed||\f
|-
||CR||13||Carriege Return||\r
|-
||SO||14||Shift Out||
|-
||SI||15||Shift In||
|-
||DLT||16||Data Link Escape||
|-
||DC1||17||Device Control 1 (XON)||
|-
||DC2||18||Device Control 2||
|-
||DC3||19||Device Control 3||
|-
||DC4||20||Device Control 4||
|-
||NAK||21||Negative Acknowledge||
|-
||SYN||22||Synchromous Idle||
|-
||ETB||23||End of Transmission Block||
|-
||CAN||24||Cancel||
|-
||EM||25||End of Medium||
|-
||SUB||27||Substitule||
|-
||ESC||27||Escape||
|-
||FS||28||File Separator||
|-
||GS||29||Group Separator||
|-
||RS||30||Record Separator||
|-
||US||31||Unit Separator||
|-
||SP||32||Space||
|-
||DEL||127||Delete||
|}
<pre>
const char NUL = '\0'; //Tambien '\x000
const char STX = '\2'; //Tambien '\x002
const char ETX = '\x003';
const char BEL = '\a'; //Tambien '\x007
const char LF = '\n'; //Tambien '\x010
const char CR = '\r'; //Tambien '\x013
</pre>
== Salida ==
{| class="wikitable"
|+Mapa caracteres Tabla ASCII
!Simbolo!!dec!!hex!!oct!!bin
|-
|!||33||0x21||41||B100001
|-
|"||34||0x22||42||B100010
|-
|#||35||0x23||43||B100011
|-
|$||36||0x24||44||B100100
|-
|%||37||0x25||45||B100101
|-
|&||38||0x26||46||B100110
|-
|'||39||0x27||47||B100111
|-
|(||40||0x28||5||B101000
|-
|)||41||0x29||51||B101001
|-
|<nowiki>*</nowiki>||42||2A||52||B101010
|-
|<nowiki>+</nowiki>||43||2B||53||B101011
|-
|,||44||2C||54||B101100
|-
|<nowiki>-</nowiki>||45||2D||55||B101101
|-
|.||46||0x2E||56||B101110
|-
|/||47||0x2F||57||B101111
|-
|0||48||0x30||60||B110000
|-
|1||49||0x31||61||B110001
|-
|2||50||0x32||62||B110010
|-
|3||51||0x33||63||B110011
|-
|4||52||0x34||64||B110100
|-
|5||53||0x35||65||B110101
|-
|6||54||0x36||66||B110110
|-
|7||55||0x37||67||B110111
|-
|8||56||0x38||70||B111000
|-
|9||57||0x39||71||B111001
|-
|:||58||0x3A||72||B111010
|-
|;||59||0x3B||73||B111011
|-
|<||60||0x3C||74||B111100
|-
|=||61||0x3D||75||B111101
|-
|>||62||0x3E||76||B111110
|-
|?||63||0x3F||77||B111111
|-
|@||64||0x40||100||B1000000
|-
|A||65||0x41||101||B1000001
|-
|B||66||0x42||102||B1000010
|-
|C||67||0x43||103||B1000011
|-
|D||68||0x44||104||B1000100
|-
|E||69||0x45||105||B1000101
|}
== Advertencias ==
* El monitor serie '''nunca''' en via CR (\r) ni LF (\n), al dar enter simplemente envia la cadera sin introducir caracarteres adicionales.
== Ejemplo ==
El monitor serie solo puede interpretar los caracteres entre 33~126.
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(115200);
while (!Serial) {
; //Espera que se conecte el puerto USB nativo.
}
Serial.println("Mapa tabla ASCII");
for (byte c=33; c>=126; c++){
Serial.write(c); //Imprime el carácter
Serial.print(", dec: ");
Serial.print(c); //Imprime su valor decimal igual que Serial.print(c, DEC);
Serial.print(", hex: ");
Serial.print(c, HEX); //Imprime su valor HEX
Serial.print(", oct: ");
Serial.print(c, OCT); //Imprime su valor OCT
Serial.print(", bin: ");
Serial.println(c, BIN); //Imprime su valor BIN
}
}
void loop() {
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Comunicaciones</categorytree>
== Referencias ==
[[Category:Comunicaciones]]
nk6b2kk9b549u7x7zpqdwgmdcyu26t6
AVR
0
385
4931
4434
2019-09-21T14:30:54Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Los AVR son una familia de microcontroladores (uC) RISC del fabricante estadounidense '''Atmel''', compañía adquirida por '''Microchip Technology''' en 2016. La arquitectura de los AVR fue concebida por dos estudiantes en el Norwegian Institute of Technology, y posteriormente refinada y desarrollada en Atmel Norway, la empresa subsidiaria de Atmel, fundada por los dos arquitectos del chip. Cuenta con bastantes aficionados debido a su diseño simple y la facilidad de programación.
== Tipos ==
Se pueden dividir en los siguientes grupos:
;ATxmega: procesadores muy potentes con 16 a 384 kB de memoria flash programable, encapsulados de 44, 64 y 100 pines (A4, A3, A1), capacidad de DMA, eventos, criptografía y amplio conjunto de periféricos con DACs.
;ATmega: microcontroladores AVR grandes con 4 a 256 kB de memoria flash programable, encapsulados de 28 a 100 pines, conjunto de instrucciones extendido (multiplicación y direccionamiento de programas mayores) y amplio conjunto de periféricos.
;ATtiny: pequeños microcontroladores AVR con 0,5 a 8 kB de memoria flash programable, encapsulados de 6 a 20 pines y un limitado conjunto de periféricos.
;AT90USB: ATmega integrado con controlador USB
;AT90CAN: ATmega con controlador de bus CAN
Tipos especiales: algunos modelos especiales, por ejemplo, para el control de los cargadores de baterías, pantallas LCD y los controles de los motores o la iluminación.
;AT90S: tipos obsoletos, los AVRs clásicos
== Vea también ==
* [[PLC]]
* [[PIC]]
* [[FPGA]]
* [[SCADA]]
== Referencias ==
[[Category:Placas]]
sbt934xyg412mxyobeaw17t02gzmkfj
Analog input
0
225
3708
3707
2019-05-06T21:54:37Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Analogico</categorytree>
[[Category:Analogico]]
m516tdkgjsj12e1m6uo3gnn3wwz7nzc
Analog out serial
0
224
3709
991
2019-05-06T21:55:00Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Analogico</categorytree>
== Referencias ==
[[Category:Analogico]]
2i9mmc2o0iyv8al1yd55kjmy3kjkj6x
Analog read serial
0
149
3699
1140
2019-05-06T21:48:46Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Este ejemplo muestra cómo leer entradas analógicas del mundo físico usando un potenciómetro. Un potenciómetro es un dispositivo mecánico simple que proporciona una cantidad variable de resistencia cuando se gira el eje. Al pasar la tensión a través de un potenciómetro y a una entrada analógica en su placa, es posible medir la cantidad de resistencia producida por un potenciómetro para un valor analógico. En este ejemplo, usted monitoreará el estado de su potenciómetro después de establecer una comunicación serial entre su Arduino o Genuino y su computadora con el software Arduino (IDE).
== Circuito ==
Conecte un potenciómetro de 10K con sus extremos a GND y +5V respectivamente. El centro del potenciometro al pin analogico A0.
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(115200);
}
void loop() {
int sensor = analogRead(A0);
Serial.println(sensor);
delay(1);
}
</syntaxhighlight>
== Comentarios ==
* Nota que NO es necesario usar [[pinMode()]].
== Vea también ==
<categorytree mode=all>Basicos</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Tutorial/AnalogReadSerial Ejemplos incluidos]
[[Category:Basicos]]
7vf99pm21wvegblqkhnb4bv2e20xs0g
Analog write MEGA
0
226
3710
993
2019-05-06T21:55:24Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Analogico</categorytree>
== Referencias ==
[[Category:Analogico]]
0uoq8tayyx091vs2dgniwnhkb9p7nwc
ArdBox
0
387
4930
4822
2019-09-21T14:29:26Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Es un [[PLC]] desarrollado por la empresa [https://www.industrialshields.com Industrial Shields], basado en un Arduino Mega original añadiendole algunos estandares industriales.
[https://www.industrialshields.com Industrial Shields] nace en OCT-2012 de la mano de Albert Prieto, un ingeniero que búsca [[PLC]] más flexibles y a un mejor costo, por lo que decidió desarrollar su propia solución usando Open Source Hardware. Por lo tanto Industrial Shields es la marca que identifica el hardware libre que a la vez sigue parámetros de '''diseño, uso y seguridad industriales''', uniendo lo mejor de dos mundos que hasta ahora avanzaban por separado.
== Caracteristicas ==
* Dispositivo industrial listo para tensión de alimentación de 5, 12 o 24 Vdc.
* Fuentes de poder industriales
* Caja para instalar en carril DIN
* Borneras terminales extraibles DIN con tornillos o resorte.
* USB, puerto serie, [[RS-232]], [[RS-485]], [[Wire|I2C]], [[SPI]] y comunicación para codificación, envío/recepción de datos y múltiples módulos y conexiones de sensores.
* Cumple todas las normativas para la automatización industrial. Compatibilidad electromagnética, CE, Rohs, etc.
== Vea también ==
* [[PLC]]
* [[FPGA]]
* [[AVR]]
* [[PIC]]
* [[SCADA]]
* [[OPC]]
== Referencias ==
* [https://www.youtube.com/watch?v=joWU2smQ2LU PLC Arduino Ardbox Relay (20 IOs Controller)]
* [https://www.youtube.com/watch?v=smEqOvNvhec&list=PLdaTsV_c5c7UzJSDFPb-0za9w4h6LBgbw Testing a servo motor with an Arduino based Industrial Controller]
* [https://youtu.be/3bwDiIV09yE PLC vs Arduino]
* [https://store.arduino.cc/usa/plc-arduino-ardbox-plc-20-i-os-relay-hf PLC Arduino ArdBox 20] - Industrial Shields
* [https://industruino.com/ Industrino]
* [https://www.controllino.biz/ Controllino]
[[Category:Placas]]
6a48p8quj9r02xvlgs816e2p0n7zdoj
Arrays
0
244
3754
3753
2019-05-06T22:16:48Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Esta variación en el ejemplo For Iop de iteración muestra cómo usar una matriz. Una matriz es una variable con varias partes. Si piensas en una variable como una taza que contiene valores, podrías pensar en una matriz como una bandeja de cubitos de hielo. Es como una serie de tazas vinculadas, todas las cuales pueden tener el mismo valor máximo.
El ejemplo For Iop de iteración muestra cómo encender seis (6) LED conectados a los pines 2 a 7 de la placa Arduino o Genuino, con ciertas limitaciones (los pines deben numerarse contiguamente, y los LED deben encenderse en secuencia).
Este ejemplo muestra cómo puede activar una secuencia de pines cuyos números no son contiguos ni necesariamente secuenciales. Para hacer esto, puede poner los números de pin en una matriz y luego usar los bucles para iterar sobre la matriz.
Esta técnica de poner los pines en una matriz es muy útil. No tiene que tener los pines secuenciales entre sí, o incluso en el mismo orden. Los puedes reorganizar en el orden que desee.
== Placa aplicable ==
Todas.
== Código ==
En este ejemplo usa 6 LED conectado cada ánodo via resistencia de 220 ohms a los pines digitales 2~7 pero de manera desordenada. Los cátodos están todos a GND. Note que aquí el orden de los LED está determinado la matriz y no por su orden físico.
<syntaxhighlight lang="c++">
const byte led[] = {2, 7, 4, 6, 5, 3}; //Pines de cada LED
const byte tot = sizeof(led); //Numero de LEDs
const byte tiempo = 300; //Retardo
void setup() {
for (byte n=0; n<tot; n++) {
pinMode(led[n], OUTPUT);
}
}
void loop() {
//Ascendente
for (byte n=0; n<tot; n++) {
digitalWrite(led[n], HIGH); //Prende LED
delay(tiempo);
digitalWrite(led[n], LOW); //Apaga LED
}
//Descendente
for (byte n=tot-1; n>=0; n--) {
digitalWrite(led[n], HIGH); //Prende LED
delay(tiempo);
digitalWrite(led[n], LOW); //Apaga LED
}
}
</syntaxhighlight>
== Comentarios ==
* La función [[sizeof()]] nos descubre el numero de LEDs por el numero de pines definidos en la matriz '''led[]''' pero tenga en cuenta que el primer elemento de la matriz es 0 y el ultimo es el numero de elementos - 1.
== Vea también ==
<categorytree mode=all>Estructuras de control</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Tutorial/Arrays Ejemplos de Arduino]
[[Category:Estructuras de control]]
5gd44vg4woc0kwhpjuu1bay48v2trxp
Asignación condicional
0
380
5286
5285
2020-04-01T14:53:00Z
Kike GL
2
/* Descripción */
wikitext
text/x-wiki
== Descripción ==
El operador ternario '''?''' es una manera simple de, a través de una condición, elegir entre dos expresiones.
== Sintaxis ==
<pre>
condición ? verdadero : falso
</pre>
== Parametros ==
;condicion:Aqui va la condición a evaluar.
;verdadero:Comando a ejecutar si la condición resulta verdadera.
;falso:Comando a ejecutar si la condición resulta false.
== Retorno ==
Luego de evaluar la condición, responderá con la opción verdadera o falsa.
== Advetencias ==
Ninguna.
== Ejemplo 1 ==
Podemos usar la '''Asignación condicional''' dentro de println()
<syntaxhighlight lang="c++">
estado = digitalRead(pin); //lectura de botón
Serial.println(estado?"Esta en ON":"Esta en OFF");
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo revisamos e imprimimos cada segundo el estado de los pines digitales: 2 al 13.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
for (byte n=2; n<14; n++){
pinMode(n, INPUT);
}
}
void loop(){
for (byte n=2; n<14; n++){
Serial.print(n);
Serial.print(" = ");
Serial.println(digitalRead(n)?"Prendido":"Apagado");
}
Serial.println("---------");
delay(1000);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Estructura control</categorytree>
== Referencias ==
* [https://picandocodigo.net/2009/operador-ternario-operador-condicional/ Operador ternario condicional] - Picando código
[[Category:Estructura control]]
7j2s5372mnka90o2wkqnhd5rgln7rly
Bar graph
0
250
1028
1025
2018-06-26T21:16:27Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
* [[Row column scanning]]
[[Category:Pantalla]]
7hf0wiay2r5c4vnx3285wze7uesyv36
Bare minimum
0
146
3894
3703
2019-05-12T21:56:22Z
Kike GL
2
/* Comentarios */
wikitext
text/x-wiki
Este ejemplo contiene el mínimo de código que necesita para que un boceto se compile correctamente en el software de Arduino (IDE): las funciones [[setup()]] y [[loop()]].
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
void setup( ) {
//pone aquí su código de configuración, para ejecutarlo una vez.
}
void loop( ) {
//pone su código principal aquí, para ejecutarlo repetidamente.
}
</syntaxhighlight>
== Comentarios ==
* La función [[setup()]] se invoca cuando se inicia un boceto. Úselo para inicializar variables, modos de pin con [[pinMode()]], comenzar a usar bibliotecas, etc. La función de configuración solo se ejecutará una vez, después de cada encendido o restablecimiento de la placa.
* La función [[loop()]] hace exactamente lo que su nombre sugiere, ciclos consecutivos, lo que permite que su boceto cambie y responda mientras se ejecuta. El código en la la sección [[loop()]] de su boceto se usa para controlar activamente en la placa Arduino.
* El código a continuación no hará nada, pero su estructura es útil para copiar y pegar para que pueda comenzar con cualquier [[boceto]] propio. También le muestra cómo hacer comentarios en su código.
* Cualquier línea que comience con dos barras (//) no será leída por el compilador, por lo que puede escribir lo que desee después de ella. Las dos barras pueden colocarse después del código funcional para mantener los comentarios en la misma línea. Comentar su código de esta manera puede ser particularmente útil para explicar, tanto a usted como a los demás, cómo funciona su programa paso a paso.
== Vea también ==
<categorytree mode=all>Basicos</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Tutorial/BareMinimum Ejemplos incluidos]
[[Category:Basicos]]
k0t45ysbz8yeh1ogey27sbahl7pq575
Blink
0
145
3701
3700
2019-05-06T21:51:06Z
Kike GL
2
wikitext
text/x-wiki
Este ejemplo muestra lo más simple que puede hacer con un Arduino para ver la salida física: parpadea el LED de a bordo.
== Funcionamiento ==
Enciende un LED por un segundo, luego lo apaga por un segundo, repetidamente.
== Placa aplicable ==
La mayoría de los Arduinos tienen un LED integrado que puedes controlar. En UNO, MEGA y ZERO está conectado al pin digital 13, en MKR1000 en el pin 6. LED_BUILTIN está configurado en el pin correcto del LED independientemente de qué placa que se use. Si desea saber a qué pin está conectado el LED de a bordo en su modelo Arduino, consulte las [https://www.arduino.cc/en/Main/Products Especificaciones técnicas].
== Comentarios ==
* En el ejemplo 2 nota que digitalRead(led) lee el estado actual del LED osea HIGH o LOW, pero recuerda que HIGH es sinonimo de [[true/false|verdadero]] y LOW sinonimo de [[true/false|falso]].
* Seria lo mismo que poner if (digitalRead(led) == HIGH).
* Mientras se cumple el tiempo de '''delay(500)''' el uC no puede ejecutar otras tareas como leer un sensor o cambiar una salida digital, pro lo que por lo general '''NO SE RECOMIENDA''' el uso de [[delay()]] de mas de 15 milisegundos y en su lugar se recomienda el usao de [[millis()]]. Ver ejemplo [[Blink without delay]].
== Código 1 ==
En este ejemplo parpadea el LED a bordo.
<syntaxhighlight lang="c++">
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); //Prende LED (tension alta, HIGH)
delay(500); //Espera medio segundo
digitalWrite(LED_BUILTIN, LOW); //Apaga LED (tension baja, LOW)
delay(500); //Espera medio segundo
}
</syntaxhighlight>
== Código 2 ==
En este ejemplo deberás poner un LED con una resistencia de 330 ohms entre el pin 7 y...
;GND: el LED prende cuando pin 7 esta en HIGH.
;+5V: el LED prende cuando pin 7 esta en LOW.
<syntaxhighlight lang="c++">
const byte led = 7;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
if (digitalRead(led)){
digitalWrite(led, LOW); //Prende LED (tension baja, LOW)
}else{
digitalWrite(led, HIGH); //Prende LED (tension alta, HIGH)
}
delay(500); //Espera medio segundo
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Basicos</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Tutorial/Blink Ejemplos incluidos]
[[Category:Basicos]]
mfivmpvqru8v3intqjzoletwq5vyoc5
Blink without delay
0
152
4666
4665
2019-07-07T01:02:54Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
A veces necesitas hacer dos cosas a la vez. Por ejemplo, es posible que desee parpadear un LED mientras lee un pulsador o sensor. En este caso, no puede usar [[delay()]], porque Arduino pausa su programa durante el [[delay()]]. Si se presiona el pulsador o cambia el valor del sensor o llega algo por el puerto serie mientras Arduino está en pausa esperando que delay() termine, su programa perderá dicho evento.
Este boceto muestra cómo hacer parpadear un LED sin usar [[delay()]]. Enciende el LED y luego toma nota de la '''hora'''. Luego, cada vez que termina [[loop()]] se vuelve a ejecutar y verifica si ha pasado el '''intervalo''' de parpadeo deseado. Si paso, enciende o apaga el LED y toma nota de la nueva '''hora'''. De esta forma, el LED parpadea continuamente mientras que la ejecución del boceto nunca se detiene en una sola instrucción.
Una analogía sería calentar una pizza en un microondas y también ver un partido por TV. Pones la pizza en el microondas para calentar durante 10 minutos. La analogía del uso [[delay()]] sería sentarse frente al microondas mirando la cuenta atrás del temporizador desde 10 minutos hasta que el temporizador llegue a cero. Mientras tanto puede que ya metieran un gol y te lo perderás.
Lo que harías en la vida real sería encender el microondas y luego regresar a ver el partido. Hasta que la alarma suena avisandote que la pizza esta lista.
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
bool led = true; //Estado del LED
unsigned long hora = 0; //Hora de cambio de estado
const int intervalo = 500; //Intervalo de parpadeo (millisegundos)
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
if (millis() - hora >= intervalo) {
hora = millis();
digitalWrite(LED_BUILTIN, led);
led = !led;
}
}
</syntaxhighlight>
== Comentarios ==
* Nuevamente comentarte que verdadero es sinónimo de HIGH y falso es sinónimo de LOW.
* La variable '''hora''' debe ser del tipo [[unsigned long]] para poder soportar el retorno de la función [[millis()]]
* Ya que '''intervalo''' no cambiara durante la ejecucion la hacemos [[const]] para no ocupar RAM.
== Vea también ==
<categorytree mode=all>Ejemplo Digital</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay Ejemplos incluidos]
[[Category:Ejemplo Digital]]
q5cl7u32pi7bf62w6iyg0cghnxeiuj9
Bounce
0
413
3299
3298
2019-05-04T23:33:19Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
La librería [https://github.com/thomasfredericks/Bounce2/wiki Bounce2.h] de Thomas Frefericks que esta en el gestos de librerias del [[IDE]].
{{Nota|Para saber mas del efecto Rebote.}}
== Placas aplicables ==
== Sintaxis ==
<pre>
#include <Bounce2.h>
Bounce rebote = Bounce();
rebote.attach(pin);
rebote.interval(pausa);
</pre>
== Parametros ==
;pin:pin del pulsador.
;pausa:Valor de retardo.
== Métodos ==
{| class="wikitable"
|+Metodos disponibles en libreria Bounce2.h
|-
! Método !! Descripción
|-
| rebote.attach(pin) || Asigna el pin
|-
| rebote.interval(pausa) || Asigna el tiempo en milisegundos
|-
| rebote.update() || Debido a que Bounce no usa interrupciones, debe "actualizar" el objeto antes de leer su valor y debe hacerlo con la mayor frecuencia posible (eso significa incluirlo en su bucle loop()). El método update() actualiza el objeto y devuelve verdadero (1) si el estado del pin cambia. Falso (0) si no. Solo llame a update() una vez por loop().
|-
| rebote.read() || Lee el estado del pin luego de update().
|-
| rebote.fell() || Devuelve true si las transiciones de señal del pin es de HIGH a LOW (falling).
|-
| rebote.rose() || Devuelve true si las transiciones de señal del pin es de LOW a HIGH (rissing).
|}
== Comentarios ==
== Advertencias ==
== Ejemplo 1 ==
El ejemplo basico, un solo pulsador en pin 2.
<syntaxhighlight lang="c++">
#include <Bounce2.h>
#define PIN 2
#define LED 13
Bounce rebote = Bounce(); //Instancia objeto
void setup() {
pinMode(PIN, INPUT_PULLUP);
rebote.attach(PIN); //Cuando ya esta definido el pin
rebote.interval(5);
pinMode(LED, OUTPUT);
}
void loop() {
rebote.update(); //Actualiza
bool valor = rebote.read();
if (valor) {
digitalWrite(LED, LOW); //Apaga LED
}else{
digitalWrite(LED, HIGH); //Prende LED
}
}
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo configuramos 8 pines.
<syntaxhighlight lang="c++">
#include <Bounce2.h>
#define LED 13
#define NUM 8
const byte PULSADOR[NUM] = {2, 3, 4, 5, 6, 7, 8, 9};
Bounce * boton = new Bounce[NUM]; //Instancia todos los pines
void setup() {
for (byte i=0; i<NUM; i++) {
boton[i].attach(PULSADOR[i], INPUT_PULLUP);
boton[i].interval(25);
}
pinMode(LED, OUTPUT);
}
void loop() {
for (byte i=0; i<NUM; i++) {
boton[i].update(); //Actualiza
if (boton[i].fell()) {
digitalWrite(LED, !digitalRead(LED)); //Conmuta LED
}
}
}
</syntaxhighlight>
== Ejemplo 3 ==
Muestra los milisegundos entre dos pulsaciones.
<syntaxhighlight lang="c++">
#include <Bounce2.h>
#define BOTON 2
Bounce rebote = Bounce();
unsigned long tiempo = 0;
void setup() {
Serial.begin(57600);
pinMode(BOTON, INPUT_PULLUP);
rebote.attach(BOTON);
rebote.interval(5);
}
void loop() {
rebote.update();
if (rebote.fell()) {;
Serial.println(millis()-tiempo);
tiempo = millis();
}
}
</syntaxhighlight>
== Ejemplo 4 ==
Muestra cuando el boton el presionado y soltado. Ademas si lo mantienes presionado te da un mensaje cada medio segundo.
<syntaxhighlight lang="c++">
#include <Bounce2.h>
#define BOTON 2
#define LED 13
Bounce rebote = Bounce();
unsigned long tiempo = 0;
bool valor = false;
void setup() {
Serial.begin(57600);
pinMode(BOTON, INPUT_PULLUP);
rebote.attach(BOTON);
rebote.interval(5);
pinMode(LED, OUTPUT);
}
void loop() {
if (rebote.update()) {
if (rebote.read()){
digitalWrite(LED, LOW);
Serial.println("Boton soltado (HIGH)");
valor = false;
}else{
digitalWrite(LED, HIGH);
Serial.println("Boton presionado (LOW)");
tiempo = millis();
valor = true;
}
}
if (valor) {
if (millis()-tiempo >= 500) {
tiempo = millis();
digitalWrite(LED, LOW);
Serial.println("Boton reactivado");
}
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
* [https://playground.arduino.cc/Code/Bounce/ Bounce2]
[[Category:Librerias]]
i70y2w6mzcghkrp4b53y4rxkyogr0aq
Button
0
153
4668
4667
2019-07-07T01:03:57Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
Los pulsadores conectan dos puntos en un circuito cuando los presiona. Este ejemplo enciende el LED a bordo mientras presiona el pulsador. Como si fuera un timbre.
== Placa aplicable ==
Todas.
== Circuito ==
* Conecta un pulsador entre el pin 2 y GND.
== Código ==
<syntaxhighlight lang="c++">
const byte pulsador = 2;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(pulsador, INPUT_PULLUP);
}
void loop() {
if (digitalRead(pulsador)) {
digitalWrite(LED_BUILTIN, LOW); //Apaga LED si sueltas pulsdor
}else{
digitalWrite(LED_BUILTIN, HIGH); //Prende LED si presionas pulsador
}
}
</syntaxhighlight>
== Comentarios ==
* Mientras el pulsador no esta presionado en el pin 2 tenemos un HIGH gracias a la resistencia PULL-UP interna que esta activada desde [[pinMode()]]. * Cuando pulsas se pasa GND al pin 2, osea LOW y la condicion del if() es false por lo que se prende el LED.
== Vea también ==
<categorytree mode=all>Ejemplo Digital</categorytree>
== Referencias ==
[[Category:Ejemplo Digital]]
1hx4gvzguzl2zfyqz33y4w18un4czkc
Button mouse control
0
279
1060
2018-06-26T21:33:22Z
Kike GL
2
Página creada con « == Placa aplicable == Todas. == Código == <syntaxhighlight lang="c++"> </syntaxhighlight> == Comentarios == == Vea también == * [[Joystick mouse control]] Category...»
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
* [[Joystick mouse control]]
[[Category:Mouse]]
n5wdddmja18931kqn1nzmuke07x5zr6
CHANGE / FALLING / RISING
0
190
3791
3781
2019-05-06T23:00:43Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Se usan para expresar (en código fuente) la manera en que una interrupción externa debe dispararse.
== Sintaxis ==
<pre>
attachInterrupt(digitalPinToInterrupt(pin), ISR, modo); //recomendado
attachInterrupt(interrupt, ISR, modo); //no recomendado
attachInterrupt(pin, ISR, modo); //Solo en Arduino Due, Zero, MKR1000 y 101.
</pre>
== Parámetros ==
;pin: pin asociado a la interrupcion
;modo: define el trigger (disparador) que puede ser: LOW (mientras se mantenga en estado bajo), CHANGE (apenas el estado cambie), RISING (después de la transición del estado bajo al alto), FALLING (después de la transición del estado alto al bajo) o HIGH (mientras se mantenga en estado alto, sólo en Due).
;ISR: Funciones de usuario.
== Retorno ==
Nada.
== Advertencias ==
Nada.
== Ejemplos ==
<pre>
const byte pulsador = 2;
volatile byte estado = LOW;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(pulsador, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(botonPin), cambia, CHANGE);
}
//Función de interrupción (ISR)
void cambia() {
estado = !estado;
}
void loop() {
digitalWrite(LED_BUILTIN, estado);
}</pre>
== Vea también ==
<categorytree mode=all>Palabras reservadas</categorytree>
== Referencias externas ==
[[Category:Palabras reservadas]]
gxq6bs28zxl9f7q6xtrjdar1trwva96
Calibration
0
227
3711
994
2019-05-06T21:56:01Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Analogico</categorytree>
== Referencias ==
[[Category:Analogico]]
2i9mmc2o0iyv8al1yd55kjmy3kjkj6x
Categoy:Arduino
0
482
4796
2019-07-18T17:02:28Z
Kike GL
2
Página creada con «Esta es la categoría principal de ArduWiki.»
wikitext
text/x-wiki
Esta es la categoría principal de ArduWiki.
bamwnl9rhisaqwi44hnakp4m6wz4a89
ChatServer
0
141
4088
3183
2019-05-30T23:52:32Z
Kike GL
2
wikitext
text/x-wiki
Un servidor simple que distribuye los mensajes entrantes a todos los clientes conectados. Para usarlo, abra una ventana de terminal, Telnet a la dirección IP de su dispositivo y escriba algo. Cualquier texto entrante se enviará a todos los clientes conectados (incluido el que escribe). Además, también podrá ver las entradas del cliente en su monitor de serie.
== Ejemplo ==
<syntaxhighlight lang="c++">
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network.
// gateway and subnet are optional:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);
IPAddress myDns(192,168,1, 1);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 0, 0);
// telnet defaults to port 23
EthernetServer server(23);
boolean alreadyConnected = false; // whether or not the client was connected previously
//Ethernet shield attached to pins 10, 11, 12, 13
void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip, myDns, gateway, subnet);
server.begin();
Serial.print("Chat server address:");
Serial.println(Ethernet.localIP());
}
void loop() {
// wait for a new client:
EthernetClient client = server.available();
// when the client sends the first byte, say hello:
if (client) {
if (!alreadyConnected) {
// clear out the input buffer:
client.flush();
Serial.println("We have a new client");
client.println("Hello, client!");
alreadyConnected = true;
}
if (client.available() > 0) {
// read the bytes incoming from the client:
char thisChar = client.read();
// echo the bytes back to the client:
server.write(thisChar);
//echo the bytes to the server as well:
Serial.write(thisChar);
}
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria Ethernet</categorytree>
== Referencias externas ==
[[Category:Libreria Ethernet]]
j0195aoy9g2kwdtd5ica1fr19wa7ixx
Chracter analisis
0
259
3724
1037
2019-05-06T22:03:00Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Caracteres</categorytree>
== Referencias ==
[[Category:Caracteres]]
eehsp8z2mxqpvgpfn3yplnugvdwkce3
Comentarios
0
203
2834
2709
2019-03-28T16:12:00Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Se usa para poner comentarios de autor. Serán ignorados por el compilador.
== Sintaxis ==
<pre>
//comentario corto
/* comentario
de varias filas */
</pre>
== Retorna ==
Nada.
== Ejemplos ==
<syntaxhighlight lang="c++">
/*Los autores
de este ArduWiki
son valuntario*/
//De lo major
</syntaxhighlight>
== Vea también ==
* [[Palabras reservadas]]
* [[Estructura]]
* [[setup()]]
* [[loop()]]
== Referencia ==
* [https://www.arduino.cc/reference/en/language/structure/further-syntax/singlelinecomment/ Guia de referencia]
[[Category:Estructura]]
7ak3c0jjsujrlyjmx03kxa6a7eha736
DEBUG
0
289
2248
2247
2018-07-25T17:20:06Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Durante el desarrollo, todos usamos [[Serial.print()]] para ayudar a depurar nuestro código. Cuando las cosas parecen estables, volvemos y eliminamos el código de depuración... solo para descubrir unos días después que necesitamos nuevamente el código de depuración. Una buena solucion es dejar todo el código de depuración donde corresponde y solo modificar esta linea:
== Sintaxis ==
<pre>
#define DEBUG
#ifdef DEBUG
Serial.print("Algunas cosas de depuración");
//Más código de depuración ...
#endif
</pre>
Para desactivas solo comente la primera linea:
<pre>
//#define DEBUG
#ifdef DEBUG
Serial.print("Algunas cosas de depuración");
//Más código de depuración ...
#endif
</pre>
== Comentarios ==
Cuando comentar la primera linea logras que uC defina que DEBUG desaparezca comentándolo. Como ya no está definido en el programa, cualquier elemento entre el #ifdef y el #endif ya no forma parte del archivo fuente desde el punto de vista del compilador. Esto facilita agregar y eliminar código de depuración.
== Ejemplos ==
<syntaxhighlight lang="c++">
#define DEBUG
#ifdef DEBUG
#define DEBUG_PRINT(x) Serial.print(x)
#define DEBUG_PRINTDEC(x) Serial.print(x, DEC)
#define DEBUG_PRINTLN(x) Serial.println(x)
#else
#define DEBUG_PRINT(x)
#define DEBUG_PRINTDEC(x)
#define DEBUG_PRINTLN(x)
#endif
</syntaxhighlight>
== Ejemplo 1 ==
Imprimir una matriz
<syntaxhighlight lang="c++">
#define DEBUG_ARRAY(a) {
for (int index=0; index<sizeof(a)/sizeof(a[0]); index++){
Serial.print(a[index]);
Serial.print('\t');
}
Serial.println();
};
String str = "";
const chr separador = ',';
const byte largo = 3;
int datos[largo];
void setup(){
Serial.begin(115200);
}
void loop(){
if (Serial.available()){
str = Serial.readStringUntil('\n');
for (byte i=0; i<largo ; i++){
int indice = str.indexOf(separador);
datos[i] = str.substring(0, indice).toInt();
str = str.substring(indice + 1);
}
DEBUG_ARRAY(data);
}
}
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
#define DEBUG(a) Serial.println(a);
String texto = "-123.45";
void setup(){
Serial.begin(9600);
float valor = texto.toFloat();
DEBUG(valor);
}
void loop(){
//Nada.
}
</syntaxhighlight>
== Vea también ==
* [[flash]]
* [[SRAM]]
* [[EEPROM]]
== Referencias ==
* [https://forum.arduino.cc/index.php?topic=46900.0 Foro Arduino]
[[Category:Estructura]]
jvuhq0oxws4subordaeud3rt7tmpo0g
DEC / BIN / HEX / OCT
0
290
3787
3786
2019-05-06T22:58:27Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Palabras reservadas que representan los sistemas numéricos.
== Sintaxis ==
<pre>
Serial.print(variable[, tipo]);
Serial.println(variable[, tipo]);
</pre>
== Parámetros ==
;variable: Variable a evaluar.
;tipo: indica el tipo de salida. Por omision es DEC, pero puedes usar BIN, HEX u OCT. Parámetro Opcional.
== Retorno ==
Retorna la variable en el formato numérico solicitado
== Advertencias ==
* Nota que DEC, HEX, OCT y BIN se debe escribir en mayusculas.
== Ejemplos ==
<syntaxhighlight lang="c++">
byte n = 'A';
Serial.write(n); //A
Serial.println(n); //65
Serial.println(n, DEC); //65
Serial.println(n, HEX); //41
Serial.println(n, OCT); //101
Serial.println(n, BIN); //1000001
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Palabras reservadas</categorytree>
== Referencias ==
[[Category:Palabras reservadas]]
8znld4yxc30709nbjjkfpuuf449k46y
DateTime
0
359
5139
5129
2020-01-23T16:44:55Z
Kike GL
2
/* Ejemplo 2 */
wikitext
text/x-wiki
== Descripción ==
La libreria '''RTClib.h''' agrega la funcionanlidad de reloj al Arduino, con o sin hardware externo. Permite que un [[boceto]] obtenga la fecha y hora actual. También proporciona tiempo estándar '''DateTime'''.
DateTime es una clase simple de fecha hora de uso general sin TZ/DST.
== Sintaxis ==
<pre>
#include <RTClib.h>
DateTime variable (año,mes,dia,hora,min,seg);
DateTime variable (segundos totales);
</pre>
== Parametros ==
;variable:
;año: 4 digitos del año.
;mes: 2 digitos del mes entre 1~12.
;dia: 2 digitos del dia entre 1~31.
;hora: 2 digitos de la hora entre 0~23.
;min: 2 digitos de los minutos entre 0~59.
;seg: 2 digitos de los segundos entre 0~59.
;segundos totales:segundos desde 1-ENE-1970
== Retorna ==
Nada.
== Métodos ==
{| class="wikitable"
|+Métodos disponibles clase DateTime
|-
! Método !! Descripción
|-
| year() || Año
|-
| month() || Mes (1~12)
|-
| day() || Dia (1~31)
|-
| hour() || Horas (0~23)
|-
| minute() || Minutos (0~59)
|-
| second() || Segundos (0~59)
|-
| dayOfTheWeek() || Dia de la semana (0=domingo)
|-
| secondstime() || Segundos desde 1-ENE-2000
|-
| unixtime() || Segundos desde 1-ENE-1970
|-
| timestamp() || Formato "2020-01-01T08:00:00
|}
== Comentarios ==
Nada.
== Advertencias ==
Nada.
== Ejemplo 1 ==
Si usas la librería [[RTC|RTClib.h]] tendrás disponible el método '''.unixtime()''' que es excelente para hacer operaciones con fechas.
<syntaxhighlight lang="c++">
DateTime t0 (2018,7,14,8,0,0); //2018-7-14 8:00:00
//Calculos 1
DateTime t1 = t0 + TimeSpan(0,1,0,0); //Añadir una hora
DateTime t2 = t0 + TimeSpan(1,0,0,0); //Añadir un dia
DateTime t3 = t0 - TimeSpan(7,0,0,0); //Restar una semana
//Calculos 2
DateTime unix = t0.unixtime(); //1531555200
DateTime t1 (t0.unixtime() + 3600); //Añadir una hora
DateTime t2 (t0.unixtime() + 86400L); //Añadir un dia
DateTime t3 (t0.unixtime() - 7*86400L); //Restar una semana
//Mostrar
Serial.print(t0.unixtime()); //1531555200
Serial.print(t0.year()); //2018
Serial.print(t0.month()); //7
Serial.print(t0.day()); //14
Serial.print(t0.hour()); //8
Serial.print(t0.minute()); //0
Serial.print(t0.second()); //0
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
//#include <Wire.h>
#include <RTClib.h>
RTC_Millis rtc; //Reloj por software
//RTC_DS1307 rtc; //Reloj con DS1307
//RTC_DS3231 rtc; //Reloj con DS3231
char diaSemana[7][12] = {"Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"};
void setup () {
Serial.begin(57600);
//Para setear RTC con fecha y hora cuando se compila
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//Para setear RTC a 21-MAR-2019 8:00:00
//rtc.adjust(DateTime(2019, 3, 21, 8, 0, 0));
}
void loop () {
DateTime hoy = rtc.now();
Serial.print(hoy.year());
Serial.print('-');
Serial.print(hoy.month());
Serial.print('-');
Serial.print(hoy.day());
Serial.print(" (");
Serial.print(diaSemana[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(hoy.hour());
Serial.print(':');
Serial.print(hoy.minute());
Serial.print(':');
Serial.println(hoy.second());
Serial.print("Desde 1-ENE-1970 = ");
Serial.print("Segundos = ");
Serial.println(hoy.unixtime());
Serial.print("Dias = ");
Serial.println(hoy.unixtime() / 86400L);
//calcula fecha dentro de 7 dias, 12 horas, 30 minutos y 6 segundos
DateTime futuro (hoy + TimeSpan(7,12,30,6));
Serial.print("Fecha furura: ");
Serial.print(futuro.year());
Serial.print('-');
Serial.print(futuro.month());
Serial.print('-');
Serial.print(futuro.day());
Serial.print(' ');
Serial.print(futuro.hour());
Serial.print(':');
Serial.print(futuro.minute());
Serial.print(':');
Serial.print(futuro.second());
Serial.println();
Serial.println();
delay(3000);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria RTC</categorytree>
== Referencias ==
* [https://adafruit.github.io/RTClib/html/class_date_time.html Clase DateTime] - Adafruit
* [https://github.com/adafruit/RTClib RTClib] - Adafruit
[[Category:Libreria RTC]]
eb95cct8za6ylprr7nup6xkmt0b63li
Debounce
0
154
4670
4669
2019-07-07T01:05:03Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
Los pulsadores a menudo generan transiciones falsas de apertura/cierre de contactos cuando se presionan, debido a problemas mecánicos y físicos: estas transiciones se pueden leer como múltiples presiones en un tiempo muy corto engañando al programa.
Este ejemplo muestra cómo eliminar el rebote de una entrada, lo que significa verificar dos veces en un corto período de tiempo para asegurarse de que el botón esté definitivamente presionado. Sin reblandecimiento, presionar el botón una vez puede causar resultados impredecibles. Este boceto usa la funcion [[millis()]] para realizar un seguimiento del tiempo transcurrido desde que se presionó el botón.
== Placa aplicable ==
Todas.
== Circuito ==
Conecta un pulsador entre el pin 2 y GND.
== Código ==
El siguiente boceto está basado en la versión de rebote de Limor Fried.
<syntaxhighlight lang="c++">
const byte pin = 2; //Pulsador
const byte para = 50; //Tiempo de rebote
unsigned long hora = 0; //Hora ultima vez que pulsaste
byte led = LOW; //Estado actual del LED
byte actual; //Estado actual del pulsador (buttonState)
byte anterior = LOW; //Estado anterior del pulsador (lastButtonState)
void setup() {
pinMode(pin, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, led);
}
void loop(){
byte lee a digitalRead(pin);
... falta
digitalWrite(LED_BUILTIN, led);
anterior = lee;
}
</syntaxhighlight>
== Comentarios ==
* Cada vez que el pin de entrada pasa de HIGH a LOW, el LED prende o apaga según el caso. Hay un retraso mínimo entre los conmutadores para rebotar el circuito (es decir ignorar el ruido).
* Al principio el pulsador esta libre por lo que pin 2 esta en HIGH y se guarda en '''lee'''. Luego el primer if() comprueba si hay cambio de estado (lee != anterior), como no hay lo salta. El segundo if() ya que hora=0 entra y pregunta si pulsador sigue igual (lee != actual) y luego de guardar nuevamente dicho estado y pregunta si el estado actual es LOW y como no lo es salta el cuarto if() y guarda la lectura en '''anterior'''.
* Ahora presionamos pulsador y pin 2 se pone LOW y se guarda en '''lee'''. Luego el primer if() comprueba si hay cambio de estado y como si hay entra al if() y guarda '''hora'''. Luego va el siguiente if() y aun no paso el tiempo de '''para''' por lo que guarda '''anterior''' como LOW.
* EL pulsador sigue presionado por lo que pin 2 sigue LOW por lo que salta el primer if(). Continua haciendo bucles hasta que se cumple '''para''' cuando entra al segundo if(). Entra al tercer if() y guarda '''actual''' entra al cuarto if() y cambia '''led'''.
== Vea también ==
<categorytree mode=all>Digital</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/en/Tutorial/Debounce Ejemplos incluidos]
[[Category:Ejemplo Digital]]
hrzk5d9rb1j6p486amsquig0uoe9aer
Digital input pullup
0
155
4672
4671
2019-07-07T01:05:45Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Este ejemplo demuestra el uso de [[pinMode()]] con INPUT_PULLUP. Lee una entrada digital en el pin 2, prende el LED a bordo e imprime los resultados en el monitor de serie.
== Circuito ==
Conecte un pulsador entre el pin digital 2 y GND.
== Placa aplicable ==
Todas
== Código ==
<syntaxhighlight lang="c++">
const byte pin = 2;
void setup() {
Serial.begin(115200);
pinMode(pin, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
bool pulsador = digitalRead(pin);
Serial.println(pulsador);
if (pulsador == HIGH) {
digitalWrite(LED_BUILTIN, LOW);
Serial.println(""LED OFF);
}else{
digitalWrite(LED_BUILTIN, HIGH);
Serial.println(""LED ON);
}
}
</syntaxhighlight>
== Comentarios ==
* Notese que gracias a la configuración del pin digital 2 (INPUT_PULLUP) este pin esta normalmente en HIGH y pasa a LOW cuando presionar pulsador.
* if (pulsador == HIGH) es exactamente lo mismo que if (pulsador) o '''if (ditalRead(pin))'''.
== Vea también ==
<categorytree mode=all>Ejemplo Digital</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Tutorial/DigitalInputPullup Ejemplos incluidos]
[[Category:Ejemplo Digital]]
016v9dyklztds54698nhbi2ybf5tqwc
Digital read serial
0
148
3706
1143
2019-05-06T21:53:20Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Este ejemplo muestra cómo controlar el estado del LED a bordo con un pulsador.
== Circuito ==
Conecta
== Placa aplicable ==
Todas.
== Código ==
Con este simple ejemplo gracias a la configuración del pin 2 en INPUT_PULLUP nosrmalmente estara en HIGH a no ser que se presione pulsador que pasa a LOW y prende el LED a bordo.
<syntaxhighlight lang="c++">
const byte pulsador = 2 ;
void setup(){
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(pulsador, INPUT_PULLUP);
}
void loop(){
bool boton = digitalRead(pulsador);
if (boton){
digitalWrite(LED_BUILTIN, LOW);
Serial.println("LED OFF");
}else{
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("LED ON");
}
}
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Basicos</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Tutorial/DigitalReadSerial Ejemplos incluidos]
[[Category:Basicos]]
eim8kczvk41yzaejfdf0bfs0boph4y6
Dimmer
0
232
3742
1002
2019-05-06T22:11:28Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Comunicaciones</categorytree>
== Referencias ==
[[Category:Comunicaciones]]
d8atefw72kf74bl7caf89mtyl0c79fx
EEPROM
0
335
4865
4452
2019-09-10T00:14:49Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Es una memoria no volátil para mantener datos después de apagado nuestro Arduino. Se puede grabar constantes desde un [[boceto]] con algunas instrucciones especiales. Al igual que la memoria [[flash]] tiene una vida útil de unas 100,000 ciclos de escritura. Esta memoria solo puede leerse byte a byte y su uso puede se un poco incómodo. También es algo más lenta que la [[SRAM]].
{|class="wikitable col2cen col3cen col4cen"
|+Memoria en cada Arduino
!Tipo!!Arduino [[UNO]]!!Arduino [[MEGA]]!!Arduino [[MKR1000]]
|-
|[[flash]]||32K||256K||256K
|-
|Flash-bootloader||0.5K||8K||-
|-
|[[SRAM]]||2K||8K||32K
|-
|EEPROM||1K||4K||-
|}
Es una libreria [https://github.com/thijse/Arduino-EEPROMEx EEPROM] de Thijs Elenbaas...
== Sintaxis ==
<pre>
#include <EEPROM.h>
EEPROM.write(dirección, dato);
EEPROM.read(dirección);
</pre>
== Parametros ==
;dirección:Es la dirección entre 0 y el total de memoria EEPROM de tu placa.
;dato:Es un valor de un [[byte]].
== Metodos ==
{| class="wikitable"
|+Metodos de EEPROM
|-
! Metodo !! Descripciom
|-
| read() ||
|-
| readByte() ||
|-
| readInt() ||
|-
| readLong() ||
|-
| readDouble() ||
|-
| readBlock() ||
|-
| writeByte() ||
|-
| writeInt() ||
|-
| writeLong() ||
|-
| writeDouble() ||
|-
| writeFloat() ||
|-
| writeBlock() ||
|-
| update() ||
|-
| updateByte() ||
|-
| updateInt() ||
|-
| updateLong() ||
|-
| updateBouble() ||
|-
| updateFloat() ||
|-
| updateBlock() ||
|-
| isReady() ||
|-
| setMemPool() ||
|-
| setMaxAllowedWrites() ||
|-
| getAddress() ||
|}
== Comentarios ==
* La EEPROM de tu Arduino es especialmente util para guardar datos como: MAC, IP, constantes de calibración de algún sensor y claves de usuario.
* Para actuar con esta memoria debes usar la '''libreria EEPROM.h''' que esta por defecto en el IDE.
* Debes trabajar con direcciones y hacerlo byte a byte, tanto para leer como para escribir.
* Las direcciones van de 0 a 999 y podrás almacenar datos de 0 a 255. Para datos mas grandes debes dividirlos en bytes. Por ejemplo si el dato es tipo [[unsigned int]] lo debes dividir entre 4 y luego de recuperar multiplicar por 4 (pierdes presicion).
== Advertencias ==
* En ESP8266 es distinto [https://arduino.stackexchange.com/questions/25945/how-to-read-and-write-eeprom-in-esp8266 mira aqui].
== Ejemplo 1 ==
Escribir y leer un solo [[byte]].
<syntaxhighlight lang="c++">
#include <EEPROM.h>
int Direccion = 0; //Variable con la posición de memoria
void setup(){
//Escribir
byte data = B11001; //25 en binario
EEPROM.write(Direccion, data);
//Leer
byte val = EEPROM.read(Direccion);
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 2 ==
Escribir y leer un dato tipo [[int]] osea dos bytes.
<syntaxhighlight lang="c++">
#include <EEPROM.h>
void setup(){
//Escribir
int dato = 12345;
EEPROM.write(0, highByte(dato)); //Toma mas significativo
EEPROM.write(1, lowByte(dato)); //Toma menos significativo
//Leer
int val = EEPROM.read(0);
val = val << 8; //Desplaza a la izquierda
val += EEPROM.read(1);
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 3 ==
Escribir y leer un dato tipo [[long]] osea cuatro bytes.
<syntaxhighlight lang="c++">
#include <EEPROM.h>
void setup(){
//Escribir
long dato = 123456789;
for (byte i=0; i<4; i++) {
EEPROM.write(3-i, lowByte(dato));
dato = dato >> 8; //Desplaza 8 bits a la derecha
}
//Lee
long val = 0;
for (byte i=0; i<3; i++) {
val += EEPROM.read(i);
val = val << 8; //Desplaza 8 bits a la izquierda
}
val += EEPROM.read(3);
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 4 ==
Escribir y leer un dato tipo matriz.
<syntaxhighlight lang="c++">
#include <EEPROM.h>
void setup(){
Serial.begin(9600);
//Escribir
char data[12] = "Arduino 123";
for (byte i=0; i<13; i++){
EEPROM.write(i, data[i]);
}
//Leer
char val[12];
for (byte i=0; i<13; i++){
val[i] = EEPROM.read(i);
}
Serial.print(val);
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias ==
* [https://www.arduinolibraries.info All Librays]
* [http://playground.arduino.cc/Code/EEPROMex EEPROMex]
* [https://www.luisllamas.es/guardar-variables-entre-reinicios-con-arduino-y-la-memoria-no-volatil-eeprom/ Memoria EEPROM] - Luis Llamas
* [http://www.educachip.com/como-usar-la-memoria-eeprom-de-arduino/ Como usar EEPROM] - EducaChip
* [https://arduino.stackexchange.com/questions/25945/how-to-read-and-write-eeprom-in-esp8266 EEPROM para ESP8266]
* [https://arduinoplusplus.wordpress.com/2019/04/02/persisting-application-parameters-in-eeprom/ Persisting parameters in EEPROM] - Marco_C
[[Category:Librerias]]
[[Category:memoria]]
oiaw0xeesuktdnju7u52hlz7f2xeq6a
ESP8266
0
418
3225
2019-05-03T22:54:30Z
Kike GL
2
Página creada con «== Descripción == La librería [https://github.com/adafruit/Adafruit_ESP8266 ESP8266] de Adafruit... == Placas aplicables == == Sintaxis == <pre> </pre> == Métodos ==...»
wikitext
text/x-wiki
== Descripción ==
La librería [https://github.com/adafruit/Adafruit_ESP8266 ESP8266] de Adafruit...
== Placas aplicables ==
== Sintaxis ==
<pre>
</pre>
== Métodos ==
== Comentarios ==
== Advertencias ==
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
[[Category:Librerias]]
d6zgiz8sdqnjyoemzmydvs2k51cfni9
Ejemplos incluidos
0
144
1059
1058
2018-06-26T21:32:13Z
Kike GL
2
/* Techado */
wikitext
text/x-wiki
Los ejemplos incorporados son bocetos incluidos en el software Arduino (IDE), para abrirlos haga clic en el menú de la barra de herramientas: Archivo> Ejemplos. Estos sencillos programas demuestran todos los comandos básicos de Arduino.
== Basicos ==
* [[Bare minimum]] el mínimo código necesario para comenzar un boceto de Arduino.
* [[Blink]] enciende y apaga un LED con delay().
* [[Fade]] Demuestra el uso de la salida analógica (PWM) para prender un LED.
* [[Digital read serial]] lea un interruptor e imprima su estado en el monitor serie de Arduino.
* [[Analog read serial]] lea un potenciómetro e imprima su estado en el monitor serie Arduino.
* [[Read analog voltage]] lee una entrada analógica e imprime el voltaje en el monitor serie.
== Digital ==
* [[Blink without delay]] Parpadea un LED sin usar la función delay().
* [[Button]] Usar un botón para controlar un LED.
* [[Debounce]] Lee un botón, filtrando el ruido.
* [[Digital input pullup]] Demuestra el uso de INPUT_PULLUP en pinMode().
* [[State change detection]] Cuente el número de pulsaciones de botón.
* [[Tone keyboard]] Teclado musical de tres teclas que usa sensores de fuerza y un altavoz piezoeléctrico.
* [[Tone melody]] Reproduce una melodía con un parlante Piezo.
* [[Tone múltiple]] Reproduce tonos en múltiples altavoces secuencialmente usando el comando de tono ().
* [[Tone pitch follower]] reproduce un tono en un altavoz piezoeléctrico dependiendo de una entrada analógica.
== Analógico ==
* [[Analog out serial]] Lea un pin de entrada analógica (A0~A5), asigne el resultado y luego use esos datos para atenuar o iluminar un LED.
* [[Analog input]] Use un potenciómetro para controlar el parpadeo de un LED.
* [[Analog write MEGA]] Enciende y apaga 12 LEDs, uno por uno, usando una placa Arduino MEGA.
* [[Calibration]] Defina un máximo y un mínimo para los valores esperados del sensor analógico.
* [[Fading]] Usa una salida analógica (PWM) para prender un LED.
* [[Smoothing]] Lecturas múltiples suaves de una entrada analógica.
== Comunicación ==
Estos ejemplos incluyen código que permite al Arduino hablar con bocetos de procesamiento que se ejecutan en la computadora. Para obtener más información o descargar Processing, consulte processing.org . También hay parches Max / MSP que pueden comunicarse con cada boceto de Arduino también. Para más información sobre Max / MSP, vea Cycling 74.
* [[ASCII table]] Demuestra las funciones avanzadas de salida serie de Arduino.
* [[Dimmer]] Mueva el mouse para cambiar el brillo de un LED.
* [[Graphic]] Envíe datos a la computadora y grábelos en Processing.
* [[Midi]] Envía mensajes de nota MIDI en serie.
* [[Multi serial MEGA]] Use dos de los puertos serie disponibles en el Arduino MEGA.
* [[Physical pixel]] Enciende y apaga un LED enviando datos a tu Arduino desde Processing o Max / MSP.
* [[Read ASCII string]] analiza una cadena de enteros separados por comas para prender un LED.
* [[Serial call response]] envíe múltiples variables usando un método de llamada y respuesta (handshaking).
* [[Serial call response ASCII]] envíe múltiples variables usando un método de llamada y respuesta (handshaking), y codifique ASCII antes de enviar.
* [[Serial event]] Demuestra el uso de la funcion SerialEvent().
* [[Serial passthrough]] Demuestra cómo conectar virtualmente Serial y Serial1.
* [[Virtual color mixer]] Envíe múltiples variables desde Arduino a su computadora y léalas en Processing o Max / MSP.
== Estructuras de control ==
* [[If statement conditional]] Usa un '''if()''' para cambiar las condiciones de salida segun las condiciones de entrada.
* [[Switch case 1]] cómo elegir entre un número discreto de valores.
* [[Switch case 2]] Un segundo ejemplo de switch-case, que muestra cómo tomar diferentes acciones basados en los caracteres recibidos en el puerto serie.
* [[For loop iteraction]] Controle varios LED con un bucle for.
* [[Arrays]] Una variación en el ejemplo del bucle For que demuestra cómo usar una matriz.
* [[While statement conditional]] cómo usar un bucle while para calibrar un sensor mientras se lee un pulsadar.
== Sensores ==
* [[ADXL3xx]] Lea un acelerómetro ADXL3xx.
* [[Knock]] Detecta golpes con un elemento piezoeléctrico.
* [[Memsic2125]] Acelerómetro de dos ejes.
* [[Ping]] Detecta objetos con un telémetro ultrasónico.
== Pantalla ==
* [[Bar graph]] Crea un gráfico de barras LED.
* [[Row column scanning]] Controla una matriz de LED de 8x8.
== Caracteres ==
* [[String constructor]] Inicializar objetos de cadenas.
* [[Chracter analisis]] Use los operadores para reconocer el tipo de personaje con el que estamos tratando.
* [[String addition operation]] Agregue cadenas de una variedad de formas.
* [[String append operator]] Use el operador += y el método concat() para agregar cosas a las cadenas.
* [[String case changes]] Cambia la mayúscula/minuscula en una cadena.
* [[String characters]] Obtiene/establece el valor de un carácter específico en una cadena.
* [[String comperison operators]] Compare las cadenas alfabéticamente.
* [[String index of]] Busca la primera/última instancia de un carácter en una cadena.
* [[String length & string leng trim]] Obtenga y recorte la longitud de una cadena.
* [[String Replace]] Reemplaza los caracteres individuales en una cadena.
* [[String start with ends with]] Comprueba qué caracteres/subcadenas comienza o termina una cadena determinada.
* [[String substring]] busca una subcadena dada dentro la cadena.
* [[String to int]] Convierte una cadena en un número entero.
== USB ==
Los ejemplos de teclado y mouse son exclusivos de Leonardo, Micro y Due. Demuestran el uso de bibliotecas que son exclusivas de la junta.
=== Techado ===
* [[Keyboard logout]] Cierra la sesión del usuario actual con comandos de teclado.
* [[Keyboard message]] Envía una cadena de texto cuando se presiona un botón.
* [[Keyboard reprogram]] Abre una nueva ventana en el IDE de Arduino y reprograma el Leonardo con un simple programa de parpadeo.
* [[Keyboard serial]] Lee un byte del puerto serie y devuelve una pulsación de tecla.
* [[Keyboard mouse control]] Muestra los comandos del mouse y del teclado en un programa.
=== Ratón ===
* [[Button mouse control]] Control del movimiento del cursor con 5 botones.
* [[Joystick mouse contol]] Controla el movimiento del cursor de una computadora con un Joystick cuando se presiona un botón.
== Starterkit y BasicKit ==
Los tutoriales para los ejemplos del [https://www.arduino.cc/en/Tutorial/en/Main/ArduinoStarterKit StarterKit] están disponibles en el Libro de proyectos incluido en el kit, si compra un [https://www.arduino.cc/en/Tutorial/en/Main/ArduinoBasicKit BasicKit], podrá acceder a los proyectos en línea en [https://123d.circuits.io/shop/arduino Project Ignite].
== Arduino ISP ==
[https://www.arduino.cc/en/Tutorial/ArduinoISP Arduino ISP] convierte su Arduino en un programador en circuito para volver a programar los chips ATmega. Útil cuando necesite volver a cargar el gestor de arranque en un Arduino, [https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard si va de Arduino a un ATmega en una placa de prueba], o si está haciendo su [https://www.arduino.cc/en/Tutorial/en/Main/Standalone propio circuito compatible con Arduino en una placa de prueba].
== Referencias ==
[https://www.arduino.cc/en/Tutorial/BuiltInExamples Ejemplos incorporados]
[[Category:Ejemplos]]
0dkvwqwemafwxi8t3tta2b803so5ft1
Entusiastas
0
57
2070
1465
2018-07-17T21:15:12Z
Kike GL
2
wikitext
text/x-wiki
Este wiki es editado por algunos entusiastas del [https://forum.arduino.cc/index.php?board=32.0 foro de Arduino en español].
* [[Usuario:AlexLPD|AlexLPD]]
* [[Usuario:Noter|Noter]]
* [[Usuario:Lucario448|Lucario448]]
* [[Usuario:Jopapa|Jopapa]]
* Surbyte
* [[Usuario:Swift|Swift]]
* [[Usuario:Tauro0221|Tauro0221]]
* [[Usuario:Kike_GL|Kike_GL]]
Pronto mas actualizaciones, gracias
{{Nota|Si te interesa colaborar con este proyecto y eres por lo menos usuario '''Full Member''' solo tienes que crearte una cuenta en este Wiki (arriba derecha) y luego contactar con '''Kike_GL''' en el foro de Arduino en español, gracias.}}
eab3qybqrmexl8aq57yav6c009whcrd
Estructura
0
5
5067
5066
2019-10-13T13:32:29Z
Kike GL
2
/* Sintaxis adicional */
wikitext
text/x-wiki
Los elementos del código Arduino (C ++).
== Boceto ==
La estructura básica del lenguaje de programación de Arduino es bastante simple y se compone de al menos dos partes. Estas dos partes necesarias, o funciones, encierran bloques que contienen declaraciones, estamentos o instrucciones.
Lo básico en cualquier [[boceto]] de Arduino. No puede faltar.
* [[setup()]]
* [[loop()]]
== Estructura de control ==
Como su nombre lo indica te permite desviarte del flujo secuencial, según alguna condición o repetir un bloque mediante cualquiera de los bucles.
* [[if... else]] - Condicional simple
* [[Asignación condicional]]
* [[switch... case]] - Condicional multiple
* [[for]] - Bucle fijo
* [[while]] - Bucle condicional anterior
* [[do... while]] - Bucle condicional posterior
* [[break]] - Detener condicional múltiple o bucle.
* [[continue]] - Volver a evaluar condición en bucle.
* [[goto]] - Salta hacia una etiqueta
* [[return]] - Retorno
== Sintaxis adicional ==
* [[include]] <nowiki>(#)</nowiki>
* [[defined]] <nowiki>(#)</nowiki>
* [[DEBUG]]
* [[const]]
* [[volatile]]
== Operadores aritméticos ==
Son operadores básicos que permiten construir expresiones mas complejas.
* [[asignacion]] <nowiki>(=)</nowiki>
* [[suma]] <nowiki>(+)</nowiki>
* [[resta]] <nowiki>(-)</nowiki>
* [[multiplicación]] <nowiki>(*)</nowiki>
* [[división]] <nowiki>(/)</nowiki>
* [[modulo]] <nowiki>(%)</nowiki>
== Operadores de comparación ==
Son los operadores usados para construir condiciones.
* [[igualdad]] <nowiki>(==)</nowiki>
* [[diferente]] <nowiki>(!=)</nowiki>
* [[mayor]] <nowiki>(>)</nowiki>
* [[mayor igual]] <nowiki>(>=)</nowiki>
* [[menor]] <nowiki>(<)</nowiki>
* [[menor igual]] <nowiki>(<=)</nowiki>
== Operadores booleanos ==
Son operadores lógicos que se usan para unir condiciones de forma que existe una única respuesta.
* [[not]] <nowiki>(!)</nowiki>
* [[and]] <nowiki>(&&)</nowiki>
* [[or]] <nowiki>(||)</nowiki>
* [[xor]] <nowiki>(^)</nowiki>
== Operadores bit a bit ==
Este tipo de operador te permite manipular un numero a nivel de sus bits.
* [[not bit a bit]] <nowiki>(~)</nowiki>
* [[and bit a bit]] <nowiki>(&)</nowiki>
* [[or bit a bit]] <nowiki>(|)</nowiki>
* [[xor bit a bit]] <nowiki>(^)</nowiki>
* [[bitshift right]] <nowiki>(>>)</nowiki>
* [[bitshift left]] <nowiki>(<<)</nowiki>
== Operadores compuestos ==
Este tipo de operadores se usan para hacer operaciones sobre la misma variable.
* [[incremento]] <nowiki>(++)</nowiki>
* [[decremento]] <nowiki>(--)</nowiki>
* [[suma compuesta]] <nowiki>(+=)</nowiki>
* [[resta compuesta]] <nowiki>(-=)</nowiki>
* [[multiplicacion compuesta]] <nowiki>(*=)</nowiki>
* [[division compuesta]] <nowiki>(/=)</nowiki>
* [[modulo compuesto]] <nowiki>(%=)</nowiki>
== Operadores bit a bit compuestos ==
Este tipo de operadores se usan para hacer operaciones bit a bit sobre la misma variable.
* [[or bit a bit compuesto]] <nowiki>(|=)</nowiki>
* [[and bit a bit compuesto]] <nowiki>(&=)</nowiki>
* [[bitshift right]] <nowiki>(>>=)</nowiki>
* [[bitshift left]] <nowiki>(<<=)</nowiki>
== Operadores ternarios ==
* [[Asignación condicional]]
== Operadores de acceso a punteros ==
Para acceder directamente a bloques de memoria.
* [[asterisco]] <nowiki>(*)</nowiki>
* [[ampersan]] <nowiki>(&)</nowiki>
== Otros ==
* [[Comentarios]] (//)
* [[Palabras reservadas]]
== Vea también ==
* [[Variables]]
* [[Funciones]]
[[Category:Referencias]]
0yztsg01v0zlvt8sbrsdkjz0m9e7avb
Ethernet
0
121
5277
4902
2020-03-16T17:18:04Z
Kike GL
2
/* Descripción */
wikitext
text/x-wiki
== Descripción ==
La libreria [https://github.com/arduino-libraries/Ethernet Ethernet2.h] de Paul Stoffregen están diseñadas para funcionar con Arduino Ethernet Shield (Ethernet.h) o Arduino Ethernet Shield 2 y Leonardo Ethernet (Ethernet2.h).
Esta librerias permiten que una placa Arduino se conecte a Internet. La placa puede servir como un '''servidor''' que acepta conexiones entrantes o un '''cliente''' que hace las conexiones salientes.
La libreria admiten hasta cuatro conexiones simultáneas (entrantes o salientes o una combinación), gestiona el chip W5100 y W5500; todas las funciones son las mismas siendo sus códigos portables.
{{Tip|Librería oficial, es decir que está preinstalada junto con la IDE de Arduino, no es necesario descargarla.}}
== Placas aplicables ==
Actualmente (2018) se comercializan Ethernet Shield W5100 y Ethernet Shield W5500 compatibles con UNO, MEGA y Leonardo. Además disponen de un zócalo para una memoria MicroSD por si se quiere almacenar o recuperar datos de forma masiva.
== Sintaxis ==
<pre>
#include <SPI.h>
#include <Ethernet.h>
Ethernet.begin(mac,ip,gateway,subnet);
</pre>
== Parámetros ==
;mac:
;ip:
;gateway:
;subnet:
== Métodos ==
=== Ethernet ===
La clase '''Ethernet''' inicializa la librería y la configuración de red.
<pre>
#include <SPI.h>
#include <Ethernet.h>
</pre>
{| class="wikitable"
|+Clase Ethernet
|-
! Método !! Descripción
|-
| Ethernet.begin(mac,ip,dns,gateway,subred) || Inicializa la biblioteca de Ethernet y la configuración de red.
|-
| Ethernet.dnsServerIP() ||
|-
| Ethernet.gatewayIP() || Retorna la dirección IP de la puerta de enlace para el dispositivo.
|-
| Ethernet.hardwareStatus() || le indica qué chip del controlador Ethernet WIZnet se detectó durante Ethernet.begin(), si lo hay. Esto se puede usar para solucionar problemas. Si no se detectó un controlador Ethernet, es probable que haya un problema de hardware.
|-
| Ethernet.init(pin) || Se usa para configurar el pin CS (selección de chip) para el chip del controlador Ethernet. La biblioteca Ethernet tiene un pin CS predeterminado, que generalmente es correcto, pero con algunos hardware Ethernet no estándar, es posible que necesite usar un pin CS diferente.
|-
| Ethernet.linkStatus() || Le dice si el enlace está activo. Link OFF podría indicar que el cable Ethernet está desconectado o defectuoso. Esta función solo está disponible cuando se utilizan los chips del controlador Ethernet W5200 y W5500.
|-
| Ethernet.localIP() || Obtiene la dirección IP del modulo Ethernet. Útil cuando la dirección se asigna automáticamente a través de DHCP.
|-
| Ethernet.MACAddress(mac) || Llena el búfer suministrado con la dirección MAC del dispositivo.
|-
| Ethernet.maintani() || Renovación del DHCP. Cuando se les asigna una dirección IP a través de DHCP, los dispositivos de Ethernet reciben un contrato de arrendamiento de la dirección por un período de tiempo. Con este metodo es posible solicitar la renovación del servidor DHCP. Dependiendo de la configuración del servidor, puede recibir la misma dirección, una nueva o ninguna.
|-
| Ethernet.setDnsServerIP(DNS) || Establezca la dirección IP del servidor DNS. No debe usarse con DHCP.
|-
| Ethernet.setGatewayIP(Port) || Establezca la dirección IP de la puerta de enlace de red. No debe usarse con DHCP.
|-
| Ethernet.setLocalIP(IP) || Establezca la dirección IP del dispositivo. No debe usarse con DHCP.
|-
| Ethernet.setMACAddress(mac) || Establece la dirección MAC. No debe usarse con DHCP.
|-
| Ethernet.setRetransmissionCount() ||
|-
| Ethernet.setRetransmissionTimeout() ||
|}
=== Server ===
Es cuando Arduino actúa como servidor y responde alas ordenes de los clientes.
La clase '''server''' crea servidores que pueden enviar y recibir datos a clientes conectados (programas que se ejecutan en otras computadoras o dispositivos).
<pre>
EthernetServer server = EthernetServer(puerto);
</pre>
{| class="wikitable"
|+Clase Server
|-
! Método !! Descripción
|-
| server.begin() || Le dice al servidor que comience a escuchar las conexiones entrantes.
|-
| server.available() || Obtiene un cliente que está conectado al servidor y tiene datos disponibles para leer. La conexión persiste cuando el objeto de cliente devuelto queda fuera de alcance; puede cerrarlo llamando al cliente.stop().
|-
| server.accept() || La función tradicional server.available() solo le informaría de un nuevo cliente después de enviar los datos, lo que hace que algunos protocolos como FTP sean imposibles de implementar correctamente.
|-
| server.write() || Escribir datos a todos los clientes conectados a un servidor. Estos datos se envían como un byte o serie de bytes.
|-
| server.print(dato, base) || Imprime datos en todos los clientes conectados a un servidor. Imprime los números como una secuencia de dígitos, cada uno con un carácter ASCII (por ejemplo, el número 123 se envía como los tres caracteres '1', '2', '3').
|-
| server.println(dato, base) || Imprime datos, seguidos de una nueva línea, a todos los clientes conectados a un servidor. Imprime los números como una secuencia de dígitos, cada uno con un carácter ASCII (por ejemplo, el número 123 se envía como los tres caracteres '1', '2', '3').
|}
=== Client ===
Es el modo por el cual el Arduino pide información a un servidor.
La clase de '''client''' crea clientes que pueden conectarse a servidores, enviar y recibir datos.
<pre>
EthernetClient client;
</pre>
{| class="wikitable"
|+Clase Cliente
|-
! Método !! Descripción
|-
| client.connect() || Connects to a specified IP address and port. The return value indicates success or failure. Also supports DNS lookups when using a domain name.
|-
| client.connected() || Si el cliente está conectado o no. Tenga en cuenta que un cliente se considera conectado si la conexión se ha cerrado pero todavía hay datos no leídos.
|-
| client.write(dato) || Escriba datos en el servidor al que está conectado el cliente. Estos datos se envían como un byte o serie de bytes.
|-
| client.available() || Devuelve el número de bytes disponibles para leer (es decir, la cantidad de datos que el servidor al que está conectado ha escrito al cliente).
|-
| client.read() || Lea el siguiente byte recibido del servidor al que está conectado el cliente (después de la última llamada para leer ()).
|-
| client.flush() || Espera hasta que se hayan enviado todos los caracteres salientes en el búfer.
|-
| client.print(dato, base) || Imprime datos en el servidor al que está conectado un cliente. Imprime los números como una secuencia de dígitos, cada uno con un carácter ASCII (por ejemplo, el número 123 se envía como los tres caracteres '1', '2', '3').
|-
| clinet.println(dato, base) || Imprime datos, seguidos de un retorno de carro y una nueva línea, al servidor al que está conectado un cliente. Imprime los números como una secuencia de dígitos, cada uno con un carácter ASCII (por ejemplo, el número 123 se envía como los tres caracteres '1', '2', '3').
|-
| client.stop() || Desconecta el cliente
|}
=== UDP ===
El protocolo UDP (Protocolo de Datagrama de Usuario), es ligero por lo que no tiene la parte de seguridad. No existe un control del envio de paquetes, es decir no se preocupa de el estado como lleguen los datos. Su puerto esta abierto a cualquier dispositivo. Se usa para transmitir datos a alta velocidad como en resolución de DNS, streaming, VoIP y juegos online.
La clase EthernetUDP permite enviar y recibir mensajes UDP.
<pre>
#include <EthernetUdp.h>
EthernetUDP Udp;
</pre>
{| class="wikitable"
|+Clase EthernetUDP
|-
! Método !! Descripción
|-
| Udp.begin(puerto) || Inicializa la biblioteca de ethernet UDP y la configuración de red.
|-
| Udp.status() ||
|-
| Udp.hardwareStatus() ||
|-
| Udp.status() ||
|-
| Udp.remoteIP() ||
|-
| Udp.remotePort() ||
|-
| Udp.remoteIP() ||
|-
| Udp.getSocketNumber() ||
|-
| Udp.localIP() ||
|-
| Udp.localPort() ||
|-
| Udp.MACAddress() ||
|-
| Udp.setConnectionTimeout() ||
|-
| Udp.setRetransmissionCount() ||
|-
| Udp.setLocalIP() ||
|-
| Udp.setSubnetMask() ||
|-
| Udp.setGatewayIP() ||
|-
| Udp.setDnsServerIP() ||
|-
| Udp.stop() ||
|}
== Advertencias ==
* Arduino se comunica con el modulo (shield) usando el bus [[SPI]] con los pines digitales 11, 12 y 13 en el [[UNO]] y los pines 50, 51 y 52 en el [[MEGA]]. En ambas placas, el pin 10 se usa como SS.
* En el [[MEGA]] el pin de hardware SS (53) no se usa para seleccionar el W5100, pero debe mantenerse como salida o la interfaz [[SPI]] no funcionará.
== Ejemplos ==
* Al modulo (shield) se le debe asignar una dirección MAC y una dirección IP fija usando la función '''Ethernet.begin()'''. Una dirección MAC es un identificador global único para un dispositivo en particular. Los modulo (shield) Ethernet actuales vienen con una pegatina que indica la dirección MAC que debe usar con ellos.
* Las direcciones IP válidas dependen de la configuración de su red.
* Es posible usar DHCP para asignar dinámicamente una IP al modulo (shield).
* Opcionalmente, también puede especificar una puerta de enlace de red y una subred.
=== Client ===
* [[WebClient|Web Client]] Hace una petición HTTP al servidor.
* [[WebClientRepeating|Web Client Repeating]] Hace peticiónes HTTP repetitiva al servidor.
* [[WebClientData|Web Client Data]] Envia un dato a un servidor Xampp.
=== Server ===
* [[WebServer|Web Server]] Alojar (host) una página HTML simple que muestra valores de sensores analógicos.
* [[ChatServer|Chat Server]] Configura un chat server.
=== Otros ===
* [[UDPSendReceiveString|UDP Send Receive String]] Envía y recive texto via UDP.
* UdpNtpClient: Query a Network Time Protocol (NTP) server using UDP.
* DnsWebClient: DNS and DHCP-based Web client.
* DhcpChatServer: A simple DHCP Chat Server
* DhcpAddressPrinter: Get an IP address via DHCP and print it out
* TelnetClient: A simple Telnet client
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info All libraries]
* [http://www.arduino.cc/en/Reference/Ethernet Ethernet] - Arduino
* [https://naylampmechatronics.com/blog/27_Tutorial-Ethernet-Shield-y-Arduino.html Tutorial Ethernet] - Naylamp
* [https://www.youtube.com/watch?v=idHOUiCzIRA Arduino Ethernet] - Rincon Ingenierial
* [https://www.youtube.com/watch?v=MuNi8edyQVw Conexion de Arduino a internet] - El profe Garcia
* [http://diymakers.es/crear-servidor-web-con-arduino/ Crear servidor web con Arduino] - Diy Makers
[[Category:Librerias]]
[[Category:Libreria Ethernet]]
2hq7om1q6kbcpvos4terz5u1yumdpph
F()
0
200
4801
4800
2019-07-18T17:12:29Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
La macro '''F()''' permite guardar la cadena a mostrar en monitor serie con [[Serial.print()]] o [[Serial.println()]] en la memoria [[flash]] en lugar de la [[SRAM]].
{{Nota|Si en el [[boceto]] tienes un montón de cosas que mostrar en el monitor serie, puedes llenar fácilmente la memoria [[SRAM]], por eso es aconsejable usar esta macro para guardar esos textos en la memoria [[flash]].}}
{{Nota|Cualquier clase que "herede" de Print o [[Stream]] (ej.: [[Serial]]), tendrá acceso a las funciones '''print'''; las cuales siempre serán compatibles con esta macrofunción.}}
{{Nota|Es posible crear una función o método personalizado que acepte esta macro, el tipo de dato es '''const __FlashStringHelper*''' (puntero); sin embargo cabe recordar que la memoria [[flash]] es de sólo lectura para efectos de ejecución, las modificaciones sólo son posibles si los datos se copian a [[SRAM]] de antemano (mediante variables o vectores/matrices).}}
== Sintaxis ==
<pre>
Serial.print(F("texto a mostrar"));
</pre>
== Comentarios ==
Nada.
== Advertencias ==
* '''F()''' al ser una macrofunción, solo se ejecuta en tiempo de compilación. Esto quiere decir que de parámetros se aceptan únicamente literales (entrecomillados) y cadenas de caracteres declarados como '''[[const]] [[char]]*'''; nada de vectores/matrices [[string]], ni siquiera objetos [[String]]. En resumen, '''solamente texto invariable se acepta'''.
== Ejemplos ==
<syntaxhighlight lang="c++">
Serial.println(F("Escribe algo en el monitor serie que se almacena en FLASH"));
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias externas ==
* [https://programarfacil.com/blog/arduino-blog/conversion-de-numeros-a-cadenas-en-arduino/ Converison de numeros a cadenas] - Luis del Valle
[[Category:Funciones]]
[[Category:Serial]]
aybtpxh4t02jsfgbabuc67jx3gusozc
FAQ
0
452
3955
3954
2019-05-17T22:33:02Z
Kike GL
2
/* Puedo usar un IDE diferente ? */
wikitext
text/x-wiki
== Qué es Arduino ? ==
Me alegra que hayas preguntado, tenemos una gran página de introducción en Arduino, haz [http://www.arduino.cc/en/Guide/Introduction clic aquí] para leerla.
== Y que hay de Genuino ? ==
Buena pregunta, aprenda todo sobre [http://www.arduino.cc/en/Main/GenuinoBrand Genuino] y dónde está disponible esta marca aquí.
== Qué quieres decir con hardware de código abierto ? ==
El hardware de código abierto comparte gran parte de los principios y el enfoque del software libre y de código abierto. En particular, creemos que las personas deberían poder estudiar nuestro hardware para comprender cómo funciona, realizar cambios y compartir esos cambios. Para facilitar esto, lanzamos todos los archivos de diseño original (Eagle CAD) para el hardware Arduino. Estos archivos están autorizados bajo una licencia Creative Commons Attribution Share-Alike, que permite trabajos derivados tanto personales como comerciales, siempre que acrediten a Arduino y lancen sus diseños bajo la misma licencia.
El software Arduino también es de código abierto. El código fuente para el entorno Java se publica bajo la GPL y las bibliotecas del microcontrolador C / C ++ están bajo la LGPL.
== Cómo puedo obtener una placa Arduino ? ==
Puede comprar una placa Arduino en la [http://store.arduino.cc/ tienda oficial] en línea o en uno de los distribuidores que figuran en [http://www.arduino.cc/en/Main/Buy esta página]. Si prefieres construir el tuyo, consulta la [http://www.arduino.cc/en/Main/ArduinoBoardSerialSingleSided3 placa de serie de un solo lado de Arduino], que se puede grabar y ensamblar fácilmente.
== Cuáles son las placas oficiales de Arduino ? ==
Las placas oficiales de Arduino son los que figuran en la [http://www.arduino.cc/en/Main/Products página del productos]. Estos son placas cuyos fabricante trabajan con el equipo de Arduino para garantizar una buena experiencia de usuario, compatibilidad con el [[IDE]] de Arduino y un producto de calidad. A cambio de su estatus como juntas oficiales, los fabricantes pagan una tarifa de licencia al equipo de Arduino para apoyar el desarrollo del proyecto.
En general, restringimos el uso del nombre "Arduino" para las placas oficiales. Si encuentra un producto con un nombre diferente pero descrito como "compatible con Arduino", probablemente no sea una placa oficial y no financie el trabajo continuo en el proyecto.
* Lea sobre Clones, Derivados y Falsificaciones por Massimo Banzi ([http://blog.arduino.cc/2013/07/10/send-in-the-clones/ Blog])
* Aprenda sobre cómo detectar una falsificación ([http://arduino.cc/en/Products/Counterfeit Sitio web])
== Puedo usar el logotipo de Arduino para identificar contenido no comercial ? ==
Si estás creando tutoriales, gestionando una comunidad local de usuarios de Arduino, abriendo una página enfocada en Arduino en línea (es decir, redes sociales), puede usar el [http://www.arduino.cc/en/Trademark/CommunityLogo logotipo de la comunidad de Arduino]. Esto permitirá a las personas identificar mejor lo que viene directamente de nosotros y lo que viene de la comunidad.
== Quiero diseñar mi propia placa. qué debo hacer ? ==
Los diseños de referencia para las placas Arduino están disponibles en las páginas específicas de sus productos. Están autorizados bajo una licencia Creative Commons Attribution Share-Alike, por lo que puede usarlos y adaptarlos a sus propias necesidades sin pedir permiso o pagar una tarifa.
Si desea hacer algo de interés para la comunidad, le recomendamos que exponga sus ideas en el [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?board=hwdev foro de desarrollo de hardware] donde los usuarios potenciales puedan ofrecer sugerencias.
== Cómo debo llamar a mis placas ? ==
Si estás haciendo tu propia tabla, crea tu propio nombre! Esto permitirá que las personas lo identifiquen con sus productos y lo ayudarán a construir una marca. Sea creativo: intente sugerir para qué usaría la pizarra, o enfatizar el factor de forma, o simplemente elija una palabra aleatoria que suene bien. "Arduino" es una marca comercial de Arduino LLC y no debe utilizarse para variantes no oficiales. Si está interesado en que su diseño esté incluido en la línea oficial de productos Arduino, consulte la sección Así que desea hacer un documento de Arduino y póngase en contacto con el equipo de Arduino.
Si bien los productos no oficiales no deberían tener "Arduino" en su nombre, está bien describir su producto en relación con el proyecto y la plataforma Arduino. Aquí hay algunas pautas que explican qué usos consideramos razonables.
=== No es correcto ===
* Arduino Xxxxxx
* Xxxxxx Arduino
* Compatible con Arduino Xxxxxx: use "Xxxxxx (compatible con Arduino)"
=== Es correcto ===
* Xxxxxx para Arduino: productos que funcionan con placas oficiales Arduino (por ejemplo, modulos, componentes o kits)
* Xxxxxx (compatible con Arduino): variaciones y clones que son compatibles con software y hardware.
Tenga en cuenta que si bien no intentamos restringir los usos del sufijo '''duino''', su uso hace que los italianos en el equipo se estremezcan (aparentemente suena terrible); es posible que desee evitarlo. (También es una marca registrada por una empresa húngara).
== Puedo construir un producto comercial basado en Arduino ? ==
Sí, con las siguientes condiciones:
* La incorporación física de una placa Arduino dentro de un producto comercial no requiere que usted divulgue o abra cualquier fuente de información sobre su diseño.
* Para obtener el diseño de un producto comercial de los archivos Eagle para una placa Arduino, debe liberar los archivos modificados bajo la misma licencia Creative Commons Attribution Share-Alike. Usted puede fabricar y vender el producto resultante.
* El uso del núcleo y las bibliotecas de Arduino para el firmware de un producto comercial no requiere que libere el código fuente del firmware. Sin embargo, la LGPL le exige que ponga a disposición archivos de objetos que permitan volver a vincular el firmware con versiones actualizadas del núcleo y las bibliotecas de Arduino. Cualquier modificación al núcleo y las librerias debe publicarse bajo la LGPL.
* El código fuente para el entorno Arduino está cubierto por la GPL, que requiere que cualquier modificación sea de código abierto bajo la misma licencia. No impide la venta de software derivado o su inclusión en productos comerciales.
En todos los casos, los requisitos exactos están determinados por la licencia correspondiente. Además, consulte la pregunta anterior para obtener información sobre el uso del nombre "Arduino".
== Cómo puedo ejecutar el [[IDE]] de Arduino bajo Linux ? ==
Consulte las instrucciones para [http://www.arduino.cc/playground/Linux/Ubuntu Ubuntu Linux], para [http://www.arduino.cc/playground/Linux/Debian Debian Linux], para [http://www.arduino.cc/playground/Linux/Gentoo Gentoo Linux], para [http://www.arduino.cc/playground/Learning/Linux Linux] o para [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1141345598 Linux en PPC].
Este [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1129025529 hilo] del foro Arduino tiene más información. O bien, puede usar Arduino desde la [http://www.arduino.cc/playground/Learning/CommandLine línea de comandos] sin tener que instalar Java.
== Puedo programar una placa Arduino en C ? ==
De hecho, ya lo haces en el [[IDE]]. El lenguaje Arduino es simplemente un conjunto de funciones C/C++ que se pueden llamar desde su código. Su [[boceto]] sufre cambios menores (por ejemplo, generación automática de prototipo de funciones) y luego se pasa directamente a un compilador C/C++ ([http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus avr-g ++]). Todas las construcciones estándar de C y C++ compatibles con avr-g ++ deberían funcionar en Arduino. Para más detalles, vea la página sobre el proceso de [http://www.arduino.cc/en/Hacking/BuildProcess construcción de Arduino].
== Puedo usar un [[IDE]] diferente ? ==
Es posible compilar programas para Arduino usando otras herramientas de compilación (por ejemplo, Makefiles y / o AVR Studio). Tendrá que configurarlos para vincularlos con los archivos apropiados en las librerias principales de Arduino. Vea la descripción del [http://code.google.com/p/arduino/wiki/BuildProcess proceso de construcción] de Arduino.
== Puedo usar el [[IDE]] Arduino con otras placas AVR ? ==
Sí, aunque puede requerir algunas modificaciones a las librerias centrales de Arduino.
== Dónde está la sección de solución de problemas ? ==
Estas preguntas se han trasladado a la sección de [http://www.arduino.cc/en/Guide/Troubleshooting solución de problemas] de la guía Arduino.
== Existe una Política de Privacidad sobre mis datos como usuario registrado ? ==
Sí, revisa nuestra página de [http://arduino.cc/en/Main/PrivacyPolicy Política de Privacidad]. Allí verá cómo manejamos la información de los usuarios registrados y nuestras políticas de no divulgación.
== Referencias ==
[[Category:Arduino]]
k1me8y3iqj4view67cl0cyx03naovs5
FPGA
0
386
4932
4437
2019-09-21T14:31:30Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Una field Programmable Gate Array (FPGA) o matriz de puertas programables es un dispositivo electronico programable que contiene bloques de lógica cuya interconexión y funcionalidad puede ser configurada en el momento mediante un lenguaje de descripción especializado. La lógica programable puede reproducir desde funciones tan sencillas como las llevadas a cabo por una puerta lógica o un sistema combinacional hasta complejos sistemas en un chip.
Las FPGA se usan en aplicaciones similares a los ASIC sin embargo son más lentas, tienen un mayor consumo de energía y no pueden abarcar sistemas tan complejos como ellos. A pesar de esto, las FPGA tienen las ventajas de ser reprogramables (lo que añade una enorme flexibilidad al diseño hardware), sus costos de desarrollo y adquisición son mucho menores para pequeñas cantidades de dispositivos y el tiempo de desarrollo es también menor.
Ciertos fabricantes cuentan con FPGA que sólo se pueden programar una vez, por lo que sus ventajas e inconvenientes se encuentran a medio camino entre los ASIC y las FPGA re Históricamente las FPGA surgen como una evolución de los conceptos desarrollados en las PAL y los CPLD.
{{Nota|Es un chip en blanco que contiene los tres componentes basicos: puertas logicas (AND, OR, XOR, NOT), biestables (R, S, T, D, K) y cables.}}
== Historia ==
Las '''FPGA''' fueron inventadas en el año 1984 por Ross Freeman y Bernard Vonderschmitt, cofundadores de Xilinx y surgen como una evolución de los CPLD (Complex Programmable Logic Device).
Tanto los CPLD como las '''FPGA''' contienen un gran número de elementos lógicos programables. Si medimos la densidad de los elementos lógicos programables en puertas lógicas equivalentes (número de puertas NAND equivalentes que podríamos programar en un dispositivo) podríamos decir que en un CPLD hallaríamos del orden de decenas de miles de puertas lógicas equivalentes y en una FPGA del orden de cientos de miles hasta millones de ellas.
Aparte de las diferencias en densidad entre ambos tipos de dispositivos, la diferencia fundamental entre las FPGA y los CPLD es su arquitectura. La arquitectura de los CPLD es más rígida y consiste en una o más sumas de productos programables cuyos resultados van a parar a un número reducido de biestables síncronos (también denominados flip-flops). La arquitectura de las FPGA, por otro lado, se basa en un gran número de pequeños bloques utilizados para reproducir sencillas operaciones lógicas, que cuentan a su vez con biestables síncronos. La enorme libertad disponible en la interconexión de dichos bloques confiere a las '''FPGA''' una gran flexibilidad.
Otra diferencia importante entre FPGA y CPLD es que en la mayoría de las '''FPGA''' se pueden encontrar funciones de alto nivel (como sumadores y multiplicadores) embebidas en la propia matriz de interconexiones, así como bloques de memoria.
Las '''FPGA''' son el resultado de la convergencia de dos tecnologías diferentes, los [[PLC]] y los circuitos integrados de aplicación específica (ASIC). La historia de los [[PLC]] comenzó con los primeros dispositivos PROM (memoria programable de solo lectura) y se les añadió versatilidad con los PAL (matriz lógica programable) que permitieron un mayor número de entradas y la inclusión de registros. Esos dispositivos han continuado creciendo en tamaño y potencia. Mientras, los ASIC siempre han sido potentes dispositivos, pero su uso ha requerido tradicionalmente una considerable inversión tanto de tiempo como de dinero. Intentos de reducir esta carga han provenido de la modularización de los elementos de los circuitos, como los ASIC basados en celdas, y de la estandarización de las máscaras, tal como Ferranti fue pionero con la ULA (Uncommitted Logic Array). El paso final era combinar las dos estrategias con un mecanismo de interconexión que pudiese programarse utilizando fusibles, antifusibles o celdas RAM y celdas ROM, como los innovadores dispositivos Xilinx de mediados de los 80. Los circuitos resultantes son similares en capacidad y aplicaciones a los PLD más grandes, aunque hay diferencias puntuales que delatan antepasados diferentes. Además de en computación reconfigurable, las '''FPGA''' se usan en controladores, codificadores/decodificadores y en el prototipado de circuitos VLSI y microprocesadores a medida.
== Características ==
* Hardware libre igual que software (Existen repositorios compartidos)
* Fácil de compartir (basta compartir el archivo de configuracion de la FPGA)
* Fácil de reproducir (clonar)
* Fácil de diseñar
== Programacion ==
En la FPGA no se realiza programación tal cual como se realiza en otros dispositivos como DSP, CPLD o microcontroladores. La FPGA tiene celdas que se configuran con una función específica ya sea como memoria (FLIP-FLOP tipo D), como multiplexor o con una función lógica tipo AND, OR, XOR. La labor del programador es describir el hardware que tendrá la FPGA. Por consiguiente, la tarea del programador es definir la función lógica que realizará cada uno de los CLB, seleccionar el modo de trabajo de cada IOB e interconectarlos.
El diseñador cuenta con la ayuda de entornos de desarrollo especializados en el diseño de sistemas a implementarse en una FPGA. Un diseño puede ser capturado ya sea como esquemático, o haciendo uso de un lenguaje de programación especial. Estos lenguajes de programación especiales son conocidos como HDL o lenguajes de descripción de hardware. Los HDL más utilizados son:
* VHDL
* Verilog
* ABEL
En un intento de reducir la complejidad y el tiempo de desarrollo en fases de prototipaje rápido, y para validar un diseño en HDL, existen varias propuestas y niveles de abstracción del diseño. Los niveles de abstracción superior son los funcionales y los niveles de abstracción inferior son los de diseño al nivel de componentes hardware básicos. Entre otras, National Instruments LabVIEW FPGA propone un acercamiento de programación gráfica de alto nivel.
== Fabricantes ==
El primer fabricante de estos dispositivos fue Xilinx y estos dispositivos se mantienen como uno de los más populares en compañías y grupos de investigación. Otros vendedores en este mercado son: Atmel, Altera, AMD, Laticce y Motorola.
== FPGA Libres ==
* Clifford Wolf con ingeniería inversa logro hacer en Verilog todo los necesario para obtener el bitstring para enviar a la Lattice ICE 40
* Jesús Arroyo desarrollo APIO y ICEstudio un IDE libre
== Vea también ==
* [[PLC]]
* [[PIC]]
* [[AVR]]
* [[SCADA]]
== Referencia ==
* [https://www.youtube.com/watch?v=XWC1B7UKv98&t=566s FPGA libres] - Juan Gonzalez (Obijuan)
* [https://www.youtube.com/watch?v=K8bM14-R9Ts Buenas tiempos para las FPGA] - Sergio Cuenca
[[Category:Placas]]
9so8a664ze6ksg37xgd7jqv5lvic6f8
Fade
0
147
3698
3697
2019-05-06T21:48:30Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Este ejemplo demuestra el uso de la función [[analogWrite()]] o PWM en el desvanecimiento de un LED. [[analogWrite()]] usa modulación por ancho de pulso (PWM), activa y desactiva un pin digital muy rápidamente con una relación diferente entre encendido y apagado, para crear un efecto de desvanecimiento.
== Circuito ==
Debes poner un LED con su respectiva resistencia de 220 ohms entre un pin digital PWM y GND o +5V como quieras. Respeta la polaridad del LED.
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
const byte led = 9 ; //LED con PWM
int brillo = 0 ; //Brillo del LED
const byte paso = 5; //cuántos puntos desvanecen el LED
void setup () {
pinMode(led, OUTPUT);
}
void loop ( ) {
analogWrite(led, brillo);
brillo = brillo + paso;
//Invierte direccion
if (brillo<=0 || brillo>=255) {
paso = -paso;
}
delay(30);
}
</syntaxhighlight>
== Comentarios ==
* Brillo debe estar este 0~255 que es el rango PWM.
* El LED debe estar en un pin digital tipo PWM. En Arduino [[UNO]] puede ser: 3, 5, 6, 9, 10 y 11.
== Vea también ==
<categorytree mode=all>Basicos</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Tutorial/Fade Ejemplos incluidos]
[[Category:Basicos]]
4as4xyp31b1tj5hw4stz6m6ktyimf8w
Fading
0
228
3712
995
2019-05-06T21:56:21Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Analogico</categorytree>
== Referencias ==
[[Category:Analogico]]
2i9mmc2o0iyv8al1yd55kjmy3kjkj6x
Fecha y hora
0
393
4270
4269
2019-06-11T23:19:01Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
Arduino tiene algunas funciones que manejan directamente los temporizadores y tienen usos diversos. Pero recuerda que Arduino no tiene un temporizador permanente como si es el modulo RTC asi que no puede saber la fecha y hora. Todos sus temporizadores se '''resetean''' al desconectar la energía.
== Tiempos ==
En Arduino tenemos algunas funciones que '''detienen la ejecución del boceto'''.
{{Nota|Tenga mucho cuidado ya que durante ese tiempo el uC no hace nada mas que esterar se cumpla el retardo.}}
* [[delay()]] Pausa el programa por la cantidad de milisegundos especificado como parámetro. No devuelve nada.
* [[delayMicroseconds()]] Pausa el programa por la cantidad de mcrosegundos especificado como parámetro. No devuelve nada.
{{Nota|Si bien es fácil crear un LED parpadeante con la funcion [[delay()]] y muchos bocetos lo usan, también es usado como anti [[Rebote]] de pulsadores, el uso de [[delay()]] en un boceto tiene inconvenientes importantes. Ninguna otra lectura o manipulacion de de puerto, cálculos matemáticos puede ejecutarse durante la función de retardo, por lo que, en efecto, detiene la mayoría de otras actividades. Para obtener enfoques alternativos para controlar el tiempo consulte:}}
* [[millis()]] - Devuelve la cantidad de milisegundos desde que la placa Arduino comenzó a ejecutar el programa actual.
* [[micros()]] - Devuelve la cantidad de microsegundos desde que la placa Arduino comenzó a ejecutar el programa actual.
== Fecha y hora ==
Los temporizadores internos de Arduino son de corto plazo. Pero que hacer cuando requerimos por ejemplo poner fecha y hora en nuestro tabulado de datos de sensores (datalogger) para un análisis posterior ? Estas funciones están disponibles si añades la librería estándar de Arduino [https://github.com/PaulStoffregen/Time/blob/master/TimeLib.h TimeLib.h].
Lo primero que hace la librería '''TimeLib.h''' es definir un tipo especial de variable que llamamos [[time_t]] de 32 bits, que es la base de todo, porque almacena valores de tiempo en un formato especial calculado como el número de segundos transcurridos desde el 1-ENE-1970, llamada fecha Unix.
{| class="wikitable"
|+Funciones disponibles con TimeLib.h
|-
! Funciones !! Descripción !! rango
|-
| [[millis()]] || Milisegundos || 0~999
|-
| second() || Segundos || 0~59
|-
| minute() || Minutos || 0~59
|-
| hour() || Hora || 0~23
|-
| day() || Numero de dia || 1~31
|-
| weekday() || Dia de la semana || 1~7 (1=domingo)
|-
| dayStr(weekday()) || Nombre de dia || Saturday, Sunday
|-
| dayShortStr(weekday()) || Nombre corto del dia || Mon, Sat, Sun
|-
| month() || Numero de mes || 1~12
|-
| monthStr(month()) || Nombre del mes || July, Dicember
|-
| monthShort(month()) || Nombre corto del mes || Jul, Dic
|-
| year() || Año || 4 digitos
|-
| hourFormat12() || Pone en formato 12 horas || 0~11
|-
| isAM() || AM || Verdadero por la mañana
|-
| isPM() || PM || Verdadero por la tarde
|-
| now() || Tiempos Unix || Segundos desde 1-ENE-1970
|}
{{Nota|Fantástico ya tenemos creada nuestra variable del tipo '''time_h''' con la hora actual según nuestro Arduino... pero espera no que Arduino no sabia la fecha ni hora ? exacto lo que acabas de obtener es un porquería y hay que arreglar el Arduino.}}
== Sincronizar reloj Arduino ==
La función [[setTime()]] nos permite decirle al Arduino en que día y hora estamos y que a partir de alli mantenga '''sincronizado''' adecuadamente esa fecha hasta su próximo reseteo.
<pre>
setTime(ss); //Numero de segundos desde 1-ENE-1970
setTime(hh,mm,ss,dia,mes,año); //hora, minuto,segundo dia, mes, año
</pre>
== Otros métodos de la libreria ==
<pre>
adjustTime(ajuste); //Ajusta fecha y hora añadiendo un ajuste
setSyncProvider(getTimeFuncion); //Configurar proveedor externo
setSyncInterval(intervalo); //Indicar el intervalo de re-sincronizacion
timeStatus(); //Informa si el reloj fue sincronizado recientemente.
</pre>
Las posibles respuestas de timeStatus() son:
;timeNotSet:La fecha y hora nunca fue sincronizada
;timeNeedsSync:La fecha y hora fue isincronizada pero no se completo
;timeSet:Todo esta sincronizado
== Matemática con fechas ==
Si requieres trabajar con matematica de fechas, es decir que requeriras crear fechas y no presisamente sincronizar el reloj de Arduino, debes usar un tipo de dato matriz llamado '''tmElements_t''' que nos permite asignar cada uno de los elementos de la fecha-hora por separado como si se tratara de un conjunto de métodos asi:
<pre>
tmElements_t tx;
tx.Second = Segundos; (0~59)
tx.Minute = Minuto; (0~59)
tx.Hour = Hora; (0~23)
tx.Day = Dia; (1~31)
tx.Month = Mes; (1~12)
tx.Year = Año; (0~99) diferencia desde 1970.
</pre>
Luego puedes usar la función [[makeTime()]] que lo que hace es pasar una variable del tipo '''tmElements_t''' a una variable del tipo '''time_t'''
<pre>
time_t tiempo = makeTime(elementos);
</pre>
Donde tiempo es del tipo '''time_t''' y elementos es del tipo '''tmElements_t'''.
Asi mismo si tenemos una variable tipo '''time_t''' también la podemos descomponer en una variable tipo '''tmElements_t''' con breakTime().
<pre>
tmElements_t elementos;
breakTime(tiempo, elementos);
</pre>
== Ejemplo 1 ==
Fijamos una fecha y hora y mostramos cada segundo.
<syntaxhighlight lang="c++">
#include <TimeLib.h>
void setup(){
Serial.begin(115200);
setTime(8,0,0,14,7,2018); //14-JUL-2018 08:00:00
}
void loop(){
time_t t = now();
if (hour(t) < 10){
Serial.print("0");
}
Serial.print(hour(t));
Serial.print(":");
if (minute(t) < 10){
Serial.print("0");
}
Serial.print(minute(t));
Serial.print(":");
if (second(t) < 10){
Serial.print("0");
}
Serial.println(second(t));
delay(1000);
}
</syntaxhighlight>
== Ejemplo 2 ==
Fijamos una fecha y hora y mostramos cada segundo. Nota que no es necesario usar now(), simplemente consultamos la '''funciones vacias''' directamente
<syntaxhighlight lang="c++">
#include <TimeLib.h>
void setup() {
Serial.begin(115200);
while (!Serial); //Esperar hasta que monitor serie esta listo
setTime(8,30,0,14,7,2019);
if (timeStatus()!= timeSet){
Serial.println("No se logro sincronizar");
}else{
Serial.println("Tenemos el reloj sincronizado");
}
}
void loop(){
if (timeStatus() == timeSet) {
digitalClockDisplay();
}else{
Serial.println("El reloj no fue sincronizado.");
delay(3000);
}
delay(1000);
}
void digitalClockDisplay(){
printDig(hour());
Serial.print(":");
printDig(minute());
Serial.print(":");
printDig(second());
Serial.print(" ");
printDig(month());
Serial.print("-");
printDig(day());
Serial.print("-");
Serial.println(year());
}
void printDig(int digits){
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
</syntaxhighlight>
== Ejemplo 3 ==
Calcular la diferencia entre dos fechas. Por ejemplo del 6-NOV al 13-NOV del 2018.
Respuesta: 0 años, 0 meses, 7 dias, 20 horas, 28 minutos, 0 segundos.
<syntaxhighlight lang="c++">
#include <TimeLib.h>
time_t t0,t1,dif;
void setup(){
Serial.begin(115200);
t0 = ponFecha(2018, 11, 6, 20, 17, 0); //6-NOV-2018 20:17:00
printFecha(t0);
t1 = ponFecha(2018, 11, 13, 16, 45, 0); //13-NOV-2018 16:45:00
printFecha(t1);
Serial.println("--------------------------------------------------");
dif = t1 - t0;
Serial.print(String(year(dif)-1970) + " años, " + String(month(dif)-1) + " meses, ");
Serial.print(String(day(dif)) + " dias, " + String(hour(dif)) + " horas ");
Serial.println(String(minute(dif)) + " minutos, " + String(second(dif)) + " segundos.");
Serial.println("---------------------------------------------------");
}
time_t ponFecha(int y, int m, int d, int hh, int mm, int ss){
tmElements_t f;
f.Second = ss;
f.Minute = mm;
f.Hour = hh;
f.Day = d;
f.Month = m;
f.Year = y - 1970 ;
return makeTime(f); //Crea tiempo Unix
}
void printFecha(time_t t){
if (day(t) < 10){
Serial.print("0");
}
Serial.print(day(t)); //dia
Serial.print("-");
if (month(t) < 10){
Serial.print("0");
}
Serial.print(month(t)); //mes
Serial.print("-");
Serial.print(year(t)); //año
Serial.print(" ");
if (hour(t) < 10){
Serial.print("0");
}
Serial.print(hour(t)); //hora
Serial.print(":");
if (minute(t) < 10){
Serial.print("0");
}
Serial.print(minute(t)); //minutos
Serial.print(":");
if (second(t) < 10){
Serial.print("0");
}
Serial.println(second(t)); //segundos
}
void loop(){
//Nada
}
</syntaxhighlight>
{{Nota|Pon atención a la funciónes de usuario: '''ponFecha() y '''printFecha()''' que son muy interesantes.}}
== Ejemplo 4 ==
Dada una fecha 2019-7-14 8:30:00 sumar una hora y media (5400 segundos)
<syntaxhighlight lang="c++">
#include <TimeLib.h>
void setup(){
Serial.begin(115200);
tmElements_t tx;
tx.Second = 0;
tx.Minute = 30;
tx.Hour = 8;
tx.Day = 14;
tx.Month = 7;
tx.Year = 49; //2019-1970
muestra(tx); //Funcion muesra fecha y hora
time_t ta = makeTime(tx);
ta += 5400; //Sumar 1.5 hrs
tmElements_t tz;
breakTime(ta, tz);
muestra(tz); //Funcion muesra fecha y hora
}
void loop() {
//Nada
}
void muestra(tmElements_t ty){
Serial.print(ty.Year + 1970);
Serial.print("-");
if (ty.Month<10){
Serial.print('0');
}
Serial.print(ty.Month);
Serial.print("-");
if (ty.Day<10){
Serial.print('0');
}
Serial.print(ty.Day);
Serial.print(" ");
if (ty.Hour<10){
Serial.print('0');
}
Serial.print(ty.Hour);
Serial.print(":");
if (ty.Minute<10){
Serial.print('0');
}
Serial.print(ty.Minute);
Serial.print(":");
if (ty.Second<10){
Serial.print('0');
}
Serial.println(ty.Second);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones tiempo</categorytree>
Libreria TimeLib.h
* [[time_t]]
* [[tmElements_t]]
* [[setTime()]]
* [[adjustTime()]]
* [[timeStatus()]]
* [[makeTime()]]
* [[breakTime]]
* [[NTP]]
Libreia RTClib.h
* [[now()]]
* [[DateTime]]
* [[TimeSpan()]]
== Referencias externas ==
* [https://www.prometec.net/time-arduino/ Libreria Time en Arduino]
[[Category:Funciones tiempo]]
5z5k4kxvj4xqtp3417c7u4js8mk4c86
File.available()
0
447
4595
4587
2019-07-03T19:17:34Z
Kike GL
2
/* Sintaxis */
wikitext
text/x-wiki
== Descripción ==
Obtiene el número de bytes disponibles para leer en el archivo (antes de llegar al final de este).
== Sintaxis ==
<pre>
File archivo = SD.open("archivo.txt", FILE_WRITE);
archivo.available();
</pre>
== Parámetros ==
Nada.
== Retorno ==
La cantidad de bytes/caracteres disponibles para lectura ([[int]]).
== Comentarios ==
Si hay más de 32 KB para leer, esta función siempre retornará 32767 hasta que ocurra lo contrario. Por lo tanto, esta no es la forma más certera de hacerlo si se necesitara de un valor exacto; y mucho menos para determinar el tamaño de archivo.
En ese caso, el cálculo más adecuado sería:
<syntaxhighlight lang="c++">
unsigned long bytesRestantes = archivo.size() - archivo.position();
</syntaxhighlight>
== Ejemplo ==
Alternativa al ejemplo en [[File.read()]]:
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
// Tarjeta inicializada y archivo abierto para lectura
while (archivo.available()){
Serial.write((archivo.read());
}
archivo.close();
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
[[Category:Libreria SD]]
snuvcdjy5wx7jyecpx5e71n68rwl92d
File.close()
0
477
4689
4617
2019-07-07T01:25:10Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Cerramos el archivo, y recién en este momento los datos se guardan en la SD, pudiendo extraer de forma segura nuestra SD.
== Sintaxis ==
<pre>
File archivo = SD.open("archivo.txt", FILE_WRITE);
archivo.close();
</pre>
== Parámetros ==
Nada.
== Retorna ==
== Advertencias ==
== Comentarios ==
== Ejemplo ==
<syntaxhighlight lang="c++">
Pendiente
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
[[Category:Libreria SD]]
rjjumflsgrwwvw7dtbqrio7ocoqw1iu
File.flush()
0
456
4628
4591
2019-07-03T21:25:59Z
Kike GL
2
/* Sintaxis */
wikitext
text/x-wiki
== Descripción ==
Fuerza la actualización de los datos en la tarjeta SD (y el atributo del tamaño del archivo en caso de que haya crecido).
== Sintaxis ==
<pre>
File archivo = SD.open("archivo.txt", FILE_WRITE);
archivo.flush();
</pre>
== Parámetros ==
Nada.
== Retorna ==
Nada.
== Comentarios ==
Esta es una opción ya que, como en la [[SD|página principal de esta librería]] se mencionó, es un flujo de datos por bloques; lo que quiere decir que escribir datos no lo hace inmediatamente al medio físico (por cuestiones de rendimiento), sino que primero los registra en [[SRAM]] mediante una caché. Cuando esta se llene, automáticamente debe escribir esos datos al medio físico (la tarjeta SD) para así poder seguir con la escritura.
Este proceso de actualización ocurre en alguna de las siguientes situaciones:
* Al llamar esta función (manualmente).
* Al cambiar de bloque de datos (cada 512 bytes) si el que está en caché ha cambiado su contenido tras su lectura.
* Al cerrar el archivo (aplica la misma regla de la anterior).
* En cada intento de escritura si el archivo se abre con la opción '''O_SYNC'''.
== Advertencias ==
* No se recomienda abusar de esta función, no solo por tema de rendimiento sino por tema de desgaste en la tarjeta SD.
* Esta función siempre fallará si la instancia representa un directorio o carpeta; o el archivo no fue abierto para escritura.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
// Pendiente
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Reference/FileFlush Referencias]
[[Category:Libreria SD]]
qzoafcrih0hx2oqelddbye5ah49bj56
File.isDirectory()
0
478
4625
2019-07-03T20:17:09Z
Kike GL
2
Página creada con «== Descripción == Método de la '''clase File''' (fichero/archivo) o directorio (carpeta) dentro de la tarjeta SD; con este se interactúa directamente sobre ellos. {{Tip...»
wikitext
text/x-wiki
== Descripción ==
Método de la '''clase File''' (fichero/archivo) o directorio (carpeta) dentro de la tarjeta SD; con este se interactúa directamente sobre ellos.
{{Tip|Los directorios (o carpetas) son tipos especiales de archivos, esta función informa si el archivo actual es un directorio o no.}}
== Sintaxis ==
<pre>
File dir = SD.open(ruta);
File archivo = dir.isDirectory();
</pre>
== Parámetros ==
;ruta:Directorio o carpeta
;dir:Nombre de variable a instanciar.
;archivo:Nombre de variable a instanciar.
== Advertencias ==
== Ejemplo ==
<syntaxhighlight lang="c++">
#include <SD.h>
File root;
void setup(){
Serial.begin(9600);
pinMode(10, OUTPUT);
SD.begin(10);
root = SD.open("/"); //Instancia clase File
printDirectory(root, 0);
Serial.println("*** Listo ***");
}
void loop(){
//Nada
}
void printDirectory(File dir, int numTabs) {
while(true) {
File archivo = dir.openNextFile(); //Instancia clase File
if (!archivo) {
Serial.println("** no mas archivos **");
break;
}
for (byte i=0; i<numTabs; i++) {
Serial.print('\t');
}
Serial.print(archivo.name());
if (archivo.isDirectory()) {
Serial.println("/");
printDirectory(archivo, numTabs+1);
}else{
Serial.print("\t\t");
Serial.println(archivo.size());
}
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/en/Reference/FileIsDirectory Referencias]
[[Category:Libreria SD]]
fcp9usx1fv7wh762yhg27uduk2k23qj
File.name()
0
474
4598
4586
2019-07-03T19:18:26Z
Kike GL
2
/* Sintaxis */
wikitext
text/x-wiki
== Descripción ==
Retorna el nombre del archivo o directorio.
== Sintaxis ==
<pre>
File archivo = SD.open("archivo.txt", FILE_WRITE);
archivo.name();
</pre>
== Parámetros ==
Nada.
== Retorna ==
El nombre del archivo o directorio, o una cadena vacía si la instancia representa un archivo que nunca se abrió ([[char]]* o [[string]]).
== Comentarios ==
* Cerrar el archivo no borra esta información; por lo tanto, permanece accesible aún después de explícitamente haber ordenado el cierre. Cabe aclarar que si el archivo no se logró abrir desde el principio, este dato se halla vacío.
* Si la instancia fue creada mediante [[SD.open()]], se retornará una copia (truncada a 12 caracteres) del nombre ingresado en el primer parámetro (la ruta no forma parte del nombre).
* Si la instancia fue creada mediante [[File.openNextFile()]], se retornará la versión 8.3 del nombre del archivo/directorio en cuestión. Si el archivo/directorio fue creado mediante un sistema con soporte para LFN (ej.: un PC), el nombre retornado aquí podría parecer extraño si se violó alguna regla de los nombres 8.3. Por ejemplo: '''Mis frases favoritas.txt''' podría aparecer como '''MISFRA~1.TXT'''.
* La versión mejorada de esta librería ('''SdFat''') hace esta función "obsoleta", sugiriendo que se utilice '''getName()''' en su lugar (por la añadida compatibilidad con LFN).
== Advertencias ==
* El retorno debe considerarse como una cadena de sólo lectura, de lo contrario se corre el riesgo de corromper la instancia (o incluso más allá todavía).
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
void setup() {
// Inicializaciones
File raiz = SD.open("/");
if (!raiz) {
Serial.println("Error de apertura");
return;
}
Serial.println("Archivos en la raiz:");
File actual;
while ((actual = raiz.openNextFile())) {
Serial.print(actual.name());
Serial.print("\t\t\t");
if (actual.isDirectory()) {
Serial.println("Directorio");
} else {
Serial.print(actual.size());
Serial.println(" bytes");
}
actual.close();
}
}
void loop() {
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Reference/FileName Referencias]
[[Category:Libreria SD]]
mk1qknpvyvkaotmtl7ycj56sznku90u
File.openNextFile()
0
476
4624
4623
2019-07-03T20:09:07Z
Kike GL
2
/* Parámetros */
wikitext
text/x-wiki
== Descripción ==
Método de la '''clase File''' (fichero/archivo) o directorio (carpeta) dentro de la tarjeta SD; con este se interactúa directamente sobre ellos.
== Sintaxis ==
<pre>
File dir = SD.open(ruta);
File archivo = dir.openNextFile();
</pre>
== Parámetros ==
;ruta:Directorio o carpeta
;dir:Nombre de variable a instanciar.
;archivo:Nombre de variable a instanciar.
== Advertencias ==
== Ejemplo ==
<syntaxhighlight lang="c++">
#include <SD.h>
File root;
void setup(){
Serial.begin(9600);
pinMode(10, OUTPUT);
SD.begin(10);
root = SD.open("/");
printDirectory(root, 0);
delay(2000);
Serial.println();
Serial.println("Rewinding, and repeating below:" );
Serial.println();
delay(2000);
root.rewindDirectory();
printDirectory(root, 0);
root.close();
}
void loop(){
//Nada
}
void printDirectory(File dir, int numTabs){
while (true){
File archivo = dir.openNextFile();
if (!archivo){
if (numTabs == 0){
Serial.println("** Listo **");
}
return;
}
for (byte i=0; i<numTabs; i++){
Serial.print('\t');
}
Serial.print(archivo.name());
if (archivo.isDirectory()){
Serial.println("/");
printDirectory(archivo, numTabs + 1);
}else{
Serial.print("\t\t");
Serial.println(archivo.size());
}
archivo.close();
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/en/Reference/FileOpenNextFile Referencias]
[[Category:Libreria SD]]
5pi3jlpq4gnqv1jajsc9rs10vk71e35
File.peek()
0
446
4597
4426
2019-07-03T19:18:12Z
Kike GL
2
/* Sintaxis */
wikitext
text/x-wiki
== Descripción ==
Devuelve el siguiente byte (carácter) del archivo, sin avanzar al siguiente. Es decir, las llamadas sucesivas a '''peek()''' devolverán el mismo carácter, al igual que la próxima llamada a [[File.read()]].
El valor recuperado es relativo a la [[File.position()|posición del "cursor"]].
== Sintaxis ==
<pre>
File archivo = SD.open("archivo.txt", FILE_WRITE);
archivo.peek();
</pre>
== Retorno ==
El valor recuperado, o -1 si no hay datos para leer ([[int]]). Esto último puede deberse a que se alcanzó el final del archivo, porque está cerrado o porque no fue abierto para lectura.
== Advertencias ==
* Si por error no se verifica de antemano si hay datos disponibles, '''peek()''' retornará 255 para [[byte]] en el caso que el valor real sea -1 (nada).
* Esta función siempre fallará si la instancia representa un directorio o carpeta.
== Ejemplo ==
<syntaxhighlight lang="c++">
// Pendiente de hacer
void setup() {
}
void loop() {
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
[[Category:Libreria SD]]
k6esalkznm80wauxgsbxdv3fw1nmyw1
File.position()
0
472
4599
4579
2019-07-03T19:18:39Z
Kike GL
2
/* Sintaxis */
wikitext
text/x-wiki
== Descripción ==
Retorna la posición actual del "cursor" del archivo. Si retorna '''0''' significa que se encuentra al inicio; si retorna el mismo valor de [[File.size()]] significa que se encuentra al final.
== Sintaxis ==
<pre>
File archivo = SD.open("archivo.txt", FILE_WRITE);
archivo.position();
</pre>
== Parámetros ==
Nada.
== Retorna ==
La posición actual en bytes del "cursor", o -1 si la instancia representa un directorio/carpeta o archivo sin abrir. ([[unsigned long]]).
== Advertencias ==
* -1 en [[unsigned long]] equivale a 4294967295, lo cual puede resultar confuso si se está interactuando con un archivo cuyo tamaño alcanza el límite. En ese caso, se recomienda verificar directamente el tamaño y el estar abierto, con tal de salir de dicha confusión.
== Comentarios ==
Se habla de un "cursor" posicionado en bytes porque la librería trata internamente los archivos como vectores/matrices de tipo [[byte]], y con la posibilidad de crecer automáticamente según la necesidad.
Lo que hace esta función es retornar el índice (como el de un vector/matriz) actualmente en uso para la próxima lectura ([[File.read()]] o [[File.peek()]]) o escritura ([[File.write()]]/[[File.print()]]).
== Ejemplo ==
<syntaxhighlight lang="c++">
// Así es como se retrocede una línea de texto
void retrocederLinea() {
if (!archivo.position()) return; // No se puede retroceder si estamos al principio del archivo
retrocede();
if (archivo.peek() == '\r') retrocede(); // Esto se hace cuando el salto de línea se compone de dos caracteres
while (archivo.position() && archivo.peek() != '\n') retrocede(); // Así es como se retrocede
if (archivo.position()) archivo.read(); // Esto sucede solo si el comienzo de la línea NO es también el comienzo del archivo.
}
// Asumiendo que 'archivo' sea una variable global
bool retrocede() {
return archivo.seek(archivo.position() - 1);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
[[Category:Libreria SD]]
5w3gnfucij0sq3sk2d87glabsemhcrd
File.print()
0
450
5088
5087
2019-10-14T22:24:41Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Escribe (al archivo) un dato mediante la representación textual de su valor, haciendo esta función útil para archivos de texto plano (ej.: .txt, .csv).
Si el [[File.position()|"cursor"]] está posicionado al final del archivo (o alcanza dicho punto en el proceso), esta función lo hará crecer lo necesario para que todos los datos sean escritos. El tope de este crecimiento está en el espacio libre del "volumen" o al alcanzar los 4 GB (4294967295 bytes) de tamaño.
Si este "cursor" no está posicionado al final del archivo, entonces esta función sobrescribirá datos existentes (a partir de la posición actual); lo que hace un tanto difícil editar de esta manera texto en el archivo (imagínalo como un editor de texto dónde la tecla de retroceso no funciona, siempre en modo sobrescribir sin que se pueda cambiar al típico modo insertar, y que cada salto de línea en medio de algo borre dos caracteres en la nueva línea).
{{Nota|ya que es una implementación de [[Stream]], los detalles mencionados en [[Stream.print()]] y [[Serial.print()]] también aplican aquí.}}
== Sintaxis ==
<pre>
File archivo = SD.open("archivo.txt", FILE_WRITE);
archivo.print(cadena);
archivo.print(variable[, formato]);
</pre>
== Parametros ==
;cadena: Un [[string]] o [[String]]. También se valen literales (texto entrecomillado) y constantes [[F()]].
;variable: variable a evaluar. Esta variable puede ser de cualquier tipo.
;formato: por defecto es '''DEC''', pero puedes también usar '''HEX''', '''OCT''' o '''BIN'''. También puede ser un valor del 0 al 7 si '''variable''' es un punto flotante, representaría la cantidad de cifras decimales a imprimir (2 por defecto).
{{Tip|Equivaldría al [[File.write()]] de un solo [[byte]] si '''variable''' es de tipo [[char]].}}
== Retorna ==
La cantidad de caracteres que se llegaron a escribir en el proceso ([[int]]). Puede fallar si el archivo no puede crecer, si no está abierto o no fue abierto para escritura.
== Comentarios ==
Los literales de caracteres y cadenas también pueden representar caracteres especiales que son difíciles o imposibles de expresar de otra manera en el código fuente de un programa, como "nueva linea" (\n) o "tab" (\t). Estos caracteres especiales son todos precedidos por un carácter de barra diagonal inversa (\).
{| class="wikitable col1cen"
|+Codigos de escape
!Código!!Descripción!!ASCII!!DEC
|-
|\n||nueva línea||LF||10
|-
|\r||retorno de carro||CR||13
|-
|\t||tabulacion horizontal||HT||9
|-
|\v||tabulacion vertical||VT||11
|-
|\b||retroceso||BS||8
|-
|\f||salto de página||FF||12
|-
|\a||alerta (pitido)||BELL||7
|-
|\'||comilla simple||'||39
|-
|\"||comillas dobles||"||34
|-
|\?||signo de interrogación||?||63
|-
|\\||barra invertida||\||47
|}
== Advertencias ==
* Esta función siempre fallará si la instancia representa un directorio o carpeta.
== Ejemplo ==
<syntaxhighlight lang="c++">
// Loggear lecturas analógicas
while (!digitalRead(boton)) {
archivo.println(analogRead(A0)); // Ya sé que no es print() exactamente, pero se usa de la misma manera.
}
archivo.close();
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias externas ==
[[Category:Libreria SD]]
8ixs6qqncukcy6qmyhtkbepemis0et4
File.println()
0
455
5086
4603
2019-10-14T22:23:30Z
Kike GL
2
/* Retorna */
wikitext
text/x-wiki
== Descripción ==
Cumple exactamente la misma función que [[File.print()]], salvo que además agrega un salto de línea (el caracter de retorno del carro y nueva línea, o el literal '''"\r\n"''').
Si el [[File.position()|"cursor"]] está posicionado al final del archivo (o alcanza dicho punto en el proceso), esta función lo hará crecer lo necesario para que todos los datos sean escritos. El tope de este crecimiento está en el espacio libre del "volumen" o al alcanzar los 4 GB (4294967295 bytes) de tamaño.
Si este "cursor" no está posicionado al final del archivo, entonces esta función sobrescribirá datos existentes (a partir de la posición actual); lo que hace un tanto difícil editar de esta manera texto en el archivo (imagínalo como un editor de texto dónde la tecla de retroceso no funciona, siempre en modo sobrescribir sin que se pueda cambiar al típico modo insertar, y que cada salto de línea en medio de algo borre dos caracteres en la nueva línea).
{{Nota|ya que es una implementación de [[Stream]], los detalles mencionados en [[Stream.print()]] y [[Serial.print()]] también aplican aquí.}}
== Sintaxis ==
<pre>
File archivo = SD.open("archivo.txt", FILE_WRITE);
archivo.println();
archivo.println(cadena);
archivo.print(variable[, formato]);
</pre>
{{Tip|La primera sintaxis se usa para agregar solamente el salto de línea.}}
== Parametros ==
;cadena: Un [[string]] o [[String]]. También se valen literales (texto entrecomillado) y constantes [[F()]].
;variable: variable a evaluar. Esta variable puede ser de cualquier tipo.
;formato: por defecto es '''DEC''', pero puedes también usar '''HEX''', '''OCT''' o '''BIN'''. También puede ser un valor del 0 al 7 si '''variable''' es un punto flotante, representaría la cantidad de cifras decimales a imprimir (2 por defecto).
== Retorna ==
La cantidad de caracteres que se llegaron a escribir en el proceso ([[int]]). Puede fallar si el archivo no puede crecer, si no está abierto o no fue abierto para escritura.
== Comentarios ==
Los literales de caracteres y cadenas también pueden representar caracteres especiales que son difíciles o imposibles de expresar de otra manera en el código fuente de un programa, como "nueva linea" (\n) o "tab" (\t). Estos caracteres especiales son todos precedidos por un carácter de barra diagonal inversa (\).
{| class="wikitable col1cen"
|+Codigos de escape
!Código!!Descripción!!ASCII!!DEC
|-
|\n||nueva línea||LF||10
|-
|\r||retorno de carro||CR||13
|-
|\t||tabulacion horizontal||HT||9
|-
|\v||tabulacion vertical||VT||11
|-
|\b||retroceso||BS||8
|-
|\f||salto de página||FF||12
|-
|\a||alerta (pitido)||BELL||7
|-
|\'||comilla simple||'||39
|-
|\"||comillas dobles||"||34
|-
|\?||signo de interrogación||?||63
|-
|\\||barra invertida||\||47
|}
== Advertencias ==
* Esta función siempre fallará si la instancia representa un directorio o carpeta.
== Ejemplo ==
<syntaxhighlight lang="c++">
// Loggear lecturas analógicas
while (!digitalRead(boton)) {
archivo.println(analogRead(A0));
}
archivo.close();
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
[[Category:Libreria SD]]
d8a8iy1ayqiioct32jpl1fsep8ogdel
File.read()
0
445
4594
4593
2019-07-03T19:17:14Z
Kike GL
2
/* Sintaxis */
wikitext
text/x-wiki
== Descripción ==
Lee un byte/caracter del archivo, y además avanza al siguiente. El valor recuperado es relativo a la [[File.position()|posición del "cursor"]].
== Sintaxis ==
<pre>
File archivo = SD.open("archivo.txt", FILE_WRITE);
archivo.read()
archivo.read(buffer, tamanio);
</pre>
== Parametros ==
;buffer: una matriz de cualquier tipo, aunque usualmente de tipo [[byte]] o [[char]] (en la implementación se declara como puntero de tipo [[void]]).
;tamanio: el tamaño de dicha matriz '''en bytes'''. ([[unsigned int]]).
== Retorno ==
* Para la primera, el valor recuperado, o -1 si no hay datos para leer ([[int]]). Esto último puede deberse a que se alcanzó el final del archivo, porque está cerrado o porque no fue abierto para lectura.
* Para la segunda, la cantidad de bytes leídos exitosamente ([[unsigned int]]). Si retorna cero, es porque no logró leer nada.
== Advertencias ==
* Si por error no se verifica de antemano si hay datos disponibles, '''read()''' retornará 255 para [[byte]] en el caso que el valor real sea -1 (nada).
* Esta función siempre fallará si la instancia representa un directorio o carpeta.
== Comentarios ==
A pesar de que la segunda sintaxis hace lo mismo que [[Stream.readBytes()|readBytes()]] (y que además se puede utilizar con normalidad), se recomienda la aquí mencionada debido a que es más eficiente para la obtención de múltiples bytes que su contraparte "genérica".
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
// Tarjeta inicializada y archivo abierto para lectura
File archivo = SD.open("archivo.txt", FILE_WRITE);
int dato;
while ((dato = archivo.read()) >= 0){
Serial.write(dato); //Imprime caracter leído
}
archivo.close();
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
[[Category:Libreria SD]]
nz1182gb9m7ecsmt9fkbvuoqr3f1ihz
File.rewindDirectory()
0
479
4626
2019-07-03T20:23:17Z
Kike GL
2
Página creada con «== Descripción == Método de la '''clase File''' (fichero/archivo) o directorio (carpeta) dentro de la tarjeta SD; con este se interactúa directamente sobre ellos. {{Tip...»
wikitext
text/x-wiki
== Descripción ==
Método de la '''clase File''' (fichero/archivo) o directorio (carpeta) dentro de la tarjeta SD; con este se interactúa directamente sobre ellos.
{{Tip|Los directorios (o carpetas) son tipos especiales de archivos, esta función informa si el archivo actual es un directorio o no.}}
== Sintaxis ==
<pre>
File dir = SD.open(ruta);
File archivo = dir.rewindDirectory();
</pre>
== Parámetros ==
;ruta:Directorio o carpeta
;dir:Nombre de variable a instanciar.
;archivo:Nombre de variable a instanciar.
== Advertencias ==
== Ejemplo ==
<syntaxhighlight lang="c++">
#include <SD.h>
File root;
void setup(){
Serial.begin(9600);
pinMode(10, OUTPUT);
SD.begin(10);
root = SD.open("/"); //Crea instancia clase File
printDirectory(root, 0);
Serial.println("done!");
}
void loop(){
//Nada
}
void printDirectory(File dir, int numTabs) {
while(true) {
File archivo = dir.openNextFile(); //Crea instancia clase File
if (!archivo) {
dir.rewindDirectory();
break;
}
for (byte i=0; i<numTabs; i++) {
Serial.print('\t');
}
Serial.print(archivo.name());
if (archivo.isDirectory()) {
Serial.println("/");
printDirectory(archivo, numTabs+1);
}else{
Serial.print("\t\t");
Serial.println(archivo.size());
}
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/en/Reference/FileRewindDirectory Referencias]
[[Category:Libreria SD]]
bvch8gt75zuyaxl6nwpkjssq86fnzlz
File.seek()
0
471
4660
4596
2019-07-04T21:07:40Z
Kike GL
2
/* Ejemplo 1 */
wikitext
text/x-wiki
== Descripción ==
Coloca el "cursor" del archivo en la posición dada. '''0''' para volver al inicio, [[File.size()]] para colocarse al final.
== Sintaxis ==
<pre>
File archivo = SD.open("archivo.txt", FILE_WRITE);
archivo.seek(pos);
</pre>
== Parámetros ==
;pos: la posición (en bytes) que se desea establecer en el "cursor" ([[unsigned long]]).
== Retorna ==
'''true''' si fue posible cambiar dicha posición; '''false''' en caso contrario ([[bool]]). Puede fallar si el valor ingresado no comprende el rango entre cero y el tamaño actual del archivo.
== Comentarios ==
Se habla de un "cursor" posicionado en bytes porque la librería trata internamente los archivos como vectores/matrices de tipo [[byte]], y con la posibilidad de crecer automáticamente según la necesidad.
Lo que hace esta función es cambiar el índice (como el de un vector/matriz) al cuál se quiere acceder la próxima vez; para así recuperar ([[File.read()]] o [[File.peek()]]) el valor almacenado en dicho lugar, o modificarlo ([[File.write()]]/[[File.print()]]).
== Advertencias ==
* Esta función siempre fallará si la instancia representa un directorio o carpeta; o si el archivo no está abierto.
== Ejemplo 1 ==
Funcion de leer registro.
<syntaxhighlight lang="c++">
bool leerRegistro(Registro* r, unsigned int posicion) {
if (archivo.seek(posicion * sizeof(r))) {
return archivo.read(r, sizeof(r)); // Si se logra leer algo, equivale a retornar true
}else{
return false;
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Reference/FileSeek Referencias]
[[Category:Libreria SD]]
fenklw4p818fcp9qk6is893spyx18op
File.size()
0
473
4600
4583
2019-07-03T19:18:51Z
Kike GL
2
/* Sintaxis */
wikitext
text/x-wiki
== Descripción ==
Retorna el tamaño del archivo. Su valor inicia en cero cuando se abre uno recién creado o con la opción '''O_TRUNC'''.
== Sintaxis ==
<pre>
File archivo = SD.open("archivo.txt", FILE_WRITE);
archivo.size();
</pre>
== Parámetros ==
Nada.
== Retorna ==
El tamaño en bytes del archivo, o 0 si la instancia representa un directorio/carpeta o archivo sin abrir. ([[unsigned long]]).
== Advertencias ==
* Ya que el valor cero también se retorna en archivos sin contenido, se recomienda verificar directamente lo de estar abierto y si es un directorio/carpeta, con tal de evitar confusión.
== Ejemplo ==
<syntaxhighlight lang="c++">
unsigned long tamanioEnElementos() {
return archivo.size() / sizeof(Registro);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
[[Category:Libreria SD]]
hkxehvorur1l81j4ktmx5wk7rzdjryh
File.write()
0
449
4604
4432
2019-07-03T19:21:06Z
Kike GL
2
/* Sintaxis */
wikitext
text/x-wiki
== Descripción ==
Escribe datos binarios ("crudos") al archivo, haciendo esta función útil para archivos binarios (con contenido diferente al texto plano).
Si el [[File.position()|"cursor"]] está posicionado al final del archivo (o alcanza dicho punto en el proceso), esta función lo hará crecer lo necesario para que todos los datos sean escritos. El tope de este crecimiento está en el espacio libre del "volumen" o al alcanzar los 4 GB (4294967295 bytes) de tamaño.
Si este "cursor" no está posicionado al final del archivo, entonces esta función sobrescribirá datos existentes (a partir de la posición actual); lo que hace un tanto difícil reemplazar valores en registros de longitud variable.
== Sintaxis ==
<pre>
File archivo = SD.open("archivo.txt", FILE_WRITE);
archivo.write(val);
archivo.write(str);
archivo.write(buf, len);
</pre>
== Parametros ==
;val: Valor como un solo [[byte]] o variable (el byte menos significativo en caso de ser más grande).
;str: Cadena como una serie de bytes ([[string]]).
;buf: Matriz enviada como una serie de bytes ([[byte]]*).
;len: Largo de la matriz '''en bytes''' ([[int]]).
== Retorno ==
La cantidad real de bytes que se escribieron con éxito ([[int]]). Puede fallar si el archivo no puede crecer, si no está abierto o no fue abierto para escritura.
== Advertencias ==
* Para escribir los caracteres que representan los dígitos de un número, use la función [[File.print()]] en su lugar.
* Esta función siempre fallará si la instancia representa un directorio o carpeta.
== Ejemplo ==
<syntaxhighlight lang="c++">
while (Serial.available()) {
archivo.write(Serial.read()); // Vuelca el contenido "crudo" o binario del puerto serial, al archivo
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
[[Category:Libreria SD]]
o2z0uzm1vslnc5mpqnlhm6scwrxn5u7
Flash
0
422
3233
2019-05-03T23:16:31Z
Kike GL
2
Página creada con «== Descripción == La libreria [https://github.com/schinken/Flash Flash] de Mikal Hart, que permite el acceso facil a la memoria Flash. == Placas aplicables == == Sintaxi...»
wikitext
text/x-wiki
== Descripción ==
La libreria [https://github.com/schinken/Flash Flash] de Mikal Hart, que permite el acceso facil a la memoria Flash.
== Placas aplicables ==
== Sintaxis ==
<pre>
</pre>
== Métodos ==
== Comentarios ==
== Advertencias ==
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
[[Category:Librerias]]
l0rd05wr786skult2uj61rpit9ltpeo
For loop iteraction
0
248
3755
1024
2019-05-06T22:17:11Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Estructuras de control</categorytree>
== Referencias ==
[[Category:Estructuras de control]]
owhftcjoep9mx6gdloryrwklf4owjuv
Funciones
0
2
5070
5069
2019-10-13T13:39:31Z
Kike GL
2
/* Trigonométricas */
wikitext
text/x-wiki
Para controlar la placa Arduino y realizar cálculos.
== E/S digitales ==
Funciones especificas de Arduino para manejar los puertos de salida digitales.
* [[pinMode()]]
* [[digitalRead()]]
* [[digitalWrite()]]
* [[Programacion avanzada]]
== E/S analógicas ==
Funciones especificas de entrada analogica y salida analogica simulada (PWM).
* [[analogRead()]]
* [[analogWrite()]] - PWM
* [[analogReference()]]
* [[analogReadResolution()]] - solo [[DUE]] y [[ZERO]]
* [[analogWriteResolution()]] - solo [[DUE]] y [[ZERO]]
== E/S avanzadas ==
Otras funciones que actúan con las E/S de Arduino.
* [[tone()]]
* [[noTone()]]
* [[pulseln()]]
* [[pulselnLong()]]
== Tiempos ==
Algunas funciones que te dan acceso a los temporizadores interno.
* [[delay()]]
* [[delayMicroseconds()]]
* [[millis()]]
* [[micros()]]
* [[setTime()]] - TimeLib.h
* [[timeStatus()]] - TimeLib.h
* [[makeTime()]] - TimeLib.h
* [[breakTime()]] - TimeLib.h
* [[DateTime]] - RTClib.h
* [[now()]]
== Matemáticas ==
Funciones matemáticas que puedes usar para alterar datos numéricos.
<categorytree mode=all>Funciones matematicas</categorytree>
== Trigonométricas ==
Funciones trigonometricas básicas disponibles.
<categorytree mode=all>Funciones trigonometricas</categorytree>
== Caracteres ==
Funciones para consultar tipo de carácter.
* [[strlen()]]
* [[isAlpha()]]
* [[isAlphaNumeric()]]
* [[isAscii()]]
* [[isControl()]]
* [[isDigit()]]
* [[isGraph()]]
* [[isHexadecimalDigit()]]
* [[isPrintable()]]
* [[isPunct()]]
* [[isSpace()]]
* [[isLowerCase()]]
* [[isUpperCase()]]
* [[isWhiteSpace()]]
== Conversiones de tipo ==
Cuando requieres convertir un tipo de dato en otro puedes usar estas funciones:
* [[char()]] a [[char]]
* [[byte()]] a [[byte]]
* [[int()]] a [[int]]
* [[word()]] a [[unsigned int]]
* [[long()]] a [[long]]
* [[float()]] a [[float]]
Matrices
* [[atoi()]] a [[int]]
* [[atol()]] a [[long]]
* [[strtoul()]] a [[unsigned int]]
* [[atof()]] a [[float]]
string:
* [[itoa()]]
* [[ltoa()]]
String:
* [[String()]] a objeto [[String]]
== Random ==
Para trabajar con números pseudo-aleatorios en Arduino.
* [[random()]]
* [[randomSeed()]]
== Bit y Bytes ==
Funciones que pueden actuar sobre uno o mas bits.
<categorytree mode=all>Funciones bit y byte</categorytree>
== Interrupciones externas ==
Las interrupciones (ISR) son un método de disparar un evento sin esperar que el programa principal ([[loop()]]) llegue el turno de alguna instrucción particular.
* [[attachInterrupt()]]
* [[detachInterrupt()]]
* [[digitalPinToInterrupt()]]
* [[interrupts()]]
* [[noInterrupts()]]
== Funciones de puesto serie ==
<categorytree mode=all>Serial</categorytree>
== Funciones de String ==
<categorytree mode=all>String</categorytree>
== Funciones de usuario ==
Las funciones de usuario son la oportunidad de rehusar un bloque de código simplemente invocandolo.
* [[Funciones de usuario]]
== Puerto comunicaciones ==
Estos son algunos puertos de comunicación y algunos protocolos disponibles en Arduino.
* [[Serial]]
* [[SPI]]
* [[Wire]] o I2C
* [[CAN]]
* [[RS-485]]
== Clases y objetos ==
Algunas clases disponibles en Arduino. Debes primero instancias un objeto de la clase y luego podrás aplicar las propiedades y métodos de dicha clase.
* [[String]]
* [[Stream]]
== USB ==
Solo placas ATmega32u4, [[DUE]] y [[Zero]].
* [[Keyboard]]
* [[Mouse]]
== Vea también ==
* [[Estructura]]
* [[Variables]]
[[Category:Referencias]]
4njhxb132jkx4hzn710rdbfby5y3jmm
Funciones de usuario
0
404
2939
2938
2019-04-22T22:21:25Z
Kike GL
2
/* Ejemplo 2 */
wikitext
text/x-wiki
Una '''función de usuario''' es un bloque de código que tiene un nombre y un conjunto de instrucciones que son ejecutadas cuando se invoca a la función por su nombre.
Normalmente son escritas para realizar tareas repetitivas y para reducir el tamaño del código. Segmentar el código en funciones permite crear piezas de código que hacen una determinada tarea y volver al área del código desde la que han sido llamadas.
{{Nota|Pueden declararse en cualquier parte fuera de setup() y loop().}}
== Sintaxis ==
<pre>
tipo nombre([parametros]){codigo}
</pre>
== Parámetros ==
;tipo:Es el tipo de dato que devolverá con [[return]]. Use [[void]] para no devolver ningún dato.
;nombre:Nombre de la función.
;parámetros:Parámetros que serán enviados al invocar a función
;código:Conjunto de instrucciones a ejecutar
== Advertencias ==
Siempre debe usarse () junto al nombre de la funcion.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
int a = 10;
int b = 20;
Serial.println(opera(a,b)); //27
Serial.println(opera(10,20)); //27
}
void loop(){
//Nada
}
int opera(int n, int m) {
n = n + 2;
m = m - 5;
return n+m;
}
</syntaxhighlight>
== Vea también ==
* [[setup()]]
* [[loop()]]
* [[return]]
* [[void]]
== Referencias ==
* [https://aprendiendoarduino.wordpress.com/2016/11/16/funciones-definidas-por-usuario-2/ Aprendiendo Arduino]
[[Category:Funciones]]
oasv6u2rfw80vad0v83u3287zwiphnz
GSM
0
140
3224
3223
2019-05-03T22:51:00Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
La libreria [https://github.com/arduino-libraries/GSM GSM-h] de Arduino sirve para hacer/recibir llamadas de voz; enviar/recibir SMS y conectar a internet via redes GPRS con el modulo Quectel M10.
== Placas aplicables ==
== Sintaxis ==
<pre>
</pre>
== Métodos ==
== Advertencias ==
== Ejemplo ==
<pre>
</pre>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info All Libraryes]
* [http://www.arduino.cc/en/Reference/GSM GSM]
[[Category:Librerias]]
4an85vwf6yv0mobyipag71t87xvbc12
Graphic
0
233
3743
1003
2019-05-06T22:11:50Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Comunicaciones</categorytree>
== Referencias ==
[[Category:Comunicaciones]]
d8atefw72kf74bl7caf89mtyl0c79fx
HIGH / LOW
0
134
3695
2722
2019-05-06T18:49:11Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
Son palabras reservadas en el lenguaje Arduino. Usualmente son utilizados para expresar (en código fuente) un estado digital en un pin, aunque funcionalmente son iguales a [[true / false]].
== Sintaxis ==
<pre>
digitalWrite(pin, estado);
</pre>
== Parámetros ==
;pin: numero del pin digital (0~13 + 14~19). Arduino [[UNO]].
;estado: puedes usar LOW o HIGH, aunque también equivalen a 0 o diferente de cero respectivamente.
== Advertencia ==
* Nota que HIGH y LOW se deben escribir en mayusculas.
* El significado de HIGH (en referencia a un pin) es algo diferente según se trate de si un pin se configura como INPUT (entrada) o como OUTPUT (salida).
* Cuando un pin se configura como INPUT con [[pinMode()]] y se lee con [[digitalRead()]] HIGH si:
** Una tensión mayor de 3 voltios está presente en el pin (placas de 5 V)
** Una tensión mayor de 2 voltios está presente en el pin (placas de 3V3)
* Un pin se puede configurar como INPUT con [[pinMode()]] y en consecuencia, ponerse a nivel HIGH con [[digitalWrite()]]. Esto habilitará las resistencias pullup internas de 20K, que provocará que el pin de entrada se ponga a nivel HIGH a menos que se lleve a nivel LOW por la circuitería externa. Así es como trabaja INPUT_PULLUP descrito más adelante con más detalle.
* Cuando un pin se configura como OUTPUT con [[pinMode()]] y se activa a nivel HIGH con [[digitalWrite()]] el pin está a:
** 5 voltios (en placas alimentadas a 5 V);
** 3V3 voltios (en placas alimentadas a 3V3);
* En este estado el pin actúa como fuente (source) de corriente, por ejemplo, encender un LED conectado a masa por medio de una resistencia limitadora.
== Ejemplo 1 ==
Parpadeo de LED a bordo.
<syntaxhighlight lang="c++">
unsigned long hora=0;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
if (millis() - hora > 500){
hora = millis();
if (digitalRead(LED_BUILTIN)){
digitalWrite(LED_BUILTIN, LOW); //Apaga LED
}else{
digitalWrite(LED_BUILTIN, HIGH); //Prende LED
}
}
}
</syntaxhighlight>
== Ejemplo 2 ==
Parpadeo de LED a bordo.
<syntaxhighlight lang="c++">
unsigned long hora=0;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
if (millis() - hora > 500){
hora = millis();
if (digitalRead(LED_BUILTIN)){
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
}
}
</syntaxhighlight>
== Vea también ==
* [[Palabras reservadas]]
* [[true / false]]
* [[INPUT / OUTPUT / INPUT_PULLUP]]
* [[LED_BUILTIN]]
* [[PI]]
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/variables/constants/constants/ Niveles logicos en Arduino]
[[Category:Palabras reservadas]]
gc5y1vqhzv6p1gpgjnucs7nysyn38sm
IDE
0
336
4637
3815
2019-07-04T16:31:56Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
El '''Integrated Development Environment''' de Arduino es de fuente abierta. Existen versiones desktop para Windows, MAC y Linux. También existe un versión en linea.
Consiste de un editor de textos, un compilador, ...
== Archivos usados ==
Al crear un [[boceto]] en el IDE de Arduino , tiene acceso a una cantidad de extensiones de archivos diferentes para usar con sus archivos de código fuente. Cada uno tiene su propio uso particular que explicaré a continuación.
;.ino:
Esta es la extensión principal para su(s) archivo(s) de croquis. El archivo de boceto primario debe ser un archivo .ino con el mismo nombre que el directorio en el que se encuentra. Puede crear archivos .ino adicionales en su boceto con el nombre que desee. Antes de la compilación, todos los archivos .ino adicionales se anexan al archivo de boceto primario. Se copian en orden ascendente según el nombre del archivo, y se ejecutan a través del proceso estándar de recopilación y generación de prototipos.
;.pde:
Esta es la extensión predeterminada para bocetos escritos para Arduino IDE antes del lanzamiento de la versión 1.0. si usa una versión IDE de al menos 1.0.0 o superior, debe cambiar el nombre de su archivo de boceto de .pde a .ino . También mantenga su IDE actualizado, las versiones anteriores a la 1.0 no admiten muchas bibliotecas nuevas debido a cambios significativos en la API central de Arduino .
;.h:
Los archivos de encabezado o los archivos con la extensión .h pueden utilizarse de varias maneras. Si su boceto usa un conjunto de constantes que pueden usar múltiples archivos .cpp o .ino , puede crear una sola ubicación para sus variables comunes. Las funciones que se definen en diferentes archivos .cpp pueden tener sus declaraciones colocadas en un encabezado para facilitar su reutilización.
;.cpp:
Esta extensión es un archivo fuente C++. A veces, un boceto se vuelve bastante grande y puede utilizar un archivo .cpp para separar las secciones de su código. Las definiciones dentro de un archivo .cpp al que desea acceder en otro lugar deben tener sus declaraciones dentro de un archivo de encabezado (.h). Esto permite que su boceto incluya el encabezado y su funcionalidad. También un punto importante es; sus archivos .cpp no pasan por las modificaciones de precompilación de IDE y, por lo tanto, no generan prototipos. Para obtener más información sobre el uso de varios archivos, visite este artículo: Romper un boceto en varios archivos .
;.do:
Si desea escribir el código C y usarlo dentro de Arduino, necesita usar una extensión .c en lugar de un archivo .cpp . Sin embargo, usar un archivo .c por sí solo no es la solución completa, visite estas Preguntas frecuentes para obtener más información.
== Bocetos ==
Los programas escritos usando el software Arduino (IDE) se llaman [[boceto]]s (sketch). Estos bocetos están escritos en el editor de texto y se guardan con la extensión de archivo .ino. El editor tiene funciones para cortar/pegar y para buscar/reemplazar texto. El área de mensajes brinda comentarios al guardar y exportar y también muestra los errores. La consola muestra el texto generado por el software Arduino (IDE), incluidos los mensajes de error completos y otra información. La esquina inferior derecha de la ventana muestra la placa configurada y el puerto serie usado. Los botones de la barra de herramientas le permiten verificar y cargar programas, crear, abrir y guardar bocetos, y abrir el monitor en serie.
== Monitor serie ==
Muestra los datos en serie que se envían desde la placa Arduino via USB. Para enviar datos a la pizarra, ingrese el texto y haga clic en el botón "enviar" o presione enter. Elija la velocidad en baudios del menú desplegable que coincida con la velocidad que configuro con la función Serial.begin(baudios) en su boceto. Tenga en cuenta que en Windows, MAC o Linux, la placa Arduino se reiniciará (vuelva a ejecutar la ejecución de su boceto al comienzo) cuando se conecte con el monitor serie.
También puede hablar con la pizarra desde Processing, Flash, MaxMSP , etc.
== Serial Plotter ==
Desde la versión 1.6.6 del IDE de Arduino se dispone de una herramienta llamada Serial Plotter que nos permite hacer gráficas múltiples de los datos enviados por Arduino vía puerto serie. Sirve principalmente para hacer análisis de la forma de onda. Es un trazador de gráficos con desplazamiento en el eje x (500 puntos en el ancho total), diferentes colores para cada variable, admite valores negativos ya que el eje y se ajusta automáticamente.
Para imprimir mas de una variable deje un espacio entre los datos con " " o "\t". Puedes cargar un ejemplo desde 01.Basics
<pre>
void setup() {
Serial.begin(115200);
}
void loop() {
}
</pre>
Otro ejemplo:
<pre>
void setup(){
Serial.begin(115200);
}
void loop(){
int valor = random(0,100);
Serial.println(valor);
delay(1);
}
</pre>
== Comentarios ==
Existen dos tipos de [[Comentarios]]
== Include ==
Se usa para incluir librerías externas en su [[boceto]]. Esto le da al programador acceso a un gran grupo de librerías C estándar prefabricadas que traen nuevos métodos y funciones. El nombre de la librería deberá estar entre simbolos < >. No debe poner terminador de punto y coma o el compilador dará un error.
== Palabras reservadas ==
Las [[Palabras reservadas]] son las que cambian de color en el IDE Arduino.
== Otros IDE ==
{|class="wikitable"
!IDE!!Pugin!!Fuente
|-
|[http://www.sublimetext.com Sublime Text]||http://robot-will.github.io/Stino/||[http://forum.arduino.cc/index.php?topic=138014.0 Foro Arduino]
|-
|[http://notepad-plus-plus.org Noepad++]||http://sourceforge.net/projects/narduinoplugin/||[http://forum.arduino.cc/index.php/topic,141050.0.html Foro Arduino]
|-
|[http://www.eclipse.org/ Eclipse]||http://www.baeyens.it/eclipse/||http://playground.arduino.cc/Code/Eclipse
|-
|[http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx VisualStudio]||colspan=2|http://www.visualmicro.com/
|-
|[http://www.atmel.com/microsite/atmel_studio6/ ATmel Studio]||colspan=2|http://www.visualmicro.com/
|}
== Vea también ==
* [[boceto]]
* [[Estructura]]
* [[Variables]]
* [[Funciones]]
* [[Palabras reservadas]]
== Referencias ==
* [https://github.com/arduino/Arduino/ IDE Arduino]
* [https://create.arduino.cc/editor Version IDE Arduino en linea]
* [http://diymakers.es/guia-arduino/ Guia Arduino] - Diy Makers
[[Category:Arduino]]
leqd9tn1ft9dibd3dl8pcoly4ggjb2d
INPUT / OUTPUT / INPUT PULLUP
0
138
4131
4130
2019-06-02T17:19:34Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Son palabras reservadas usadas para definir en los pines digitales si se usara de entrada o salida. Cambia el comportamiento eléctrico del pin digital.
* Pines digitales configurados como '''INPUT''' con [[pinMode()]] se dice que son en una alta impedancia estado. Demandas extremadamente pequeñas corrientes en el circuito, equivale a una resistencia en serie de 100 Mega ohmios. Usado para leer pulsadores.
* Pines digitales configurados como '''OUTPUT''' con [[pinMode()]] se dice que estana baja impedancia. Esto significa que pueden proporcionar una cantidad sustancial de corriente a otros circuitos. Los pines digitales en Arduino pueden suministrar o resumir (absorber corriente) hasta maximo de 40 mA (miliamperios). Cargas superiores a 40 mA (por ejemplo, motores) requerirán un transistor u otro circuito de interfaz.
{{Nota|Definir un pin digital como un INPUT, para leer un pulsador por ejemplo, cuando el interruptor está en estado abierto, el pin de entrada estará "flotando", lo que dará como resultado resultados impredecibles.}}
== Sintaxis ==
<pre>
pinMode[pin, tipo];
</pre>
== Parámetros ==
;pin: numero del pin digital (0~13 + 14~19). Puedes definir el numero de pin como [[const]] [[byte]].
;tipo: puede ser INPUT / OUTPUT / INPUT_PULLUP
== Advertencias ==
* Nota que INPUT, OUTPUT y INPUT_PULLUP se deben escribir en mayusculas.
* En pines digitales OUTPUT la corriente maxima es de 40 mA.
* En pines digitales INPUT no debe dejar al aire (estado no permitido). Dara valores erraticos. Debes usar una resistencia pull-up o pull-down de 10K.
== Ejemplos ==
<syntaxhighlight lang="c++">
pinMode(2, INPUT);
pinMode(3, OUTPUT);
pinMode(4, INPUT_PULLUP);
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Palabras reservadas</categorytree>
== Referencias externas ==
[[Category:Palabras reservadas]]
t9jx4bpa2z7aq7tnrpf2dpjlav45l1q
If statement conditional
0
245
3759
1016
2019-05-06T22:18:34Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Estructuras de control</categorytree>
== Referencias ==
[[Category:Estructuras de control]]
owhftcjoep9mx6gdloryrwklf4owjuv
Indice tips
0
371
4980
4918
2019-09-26T16:32:13Z
Kike GL
2
wikitext
text/x-wiki
Esta es una sección que pretende recopilar '''Tips''' de todas partes que sean útiles a los usuarios.
;[[Tip 1]]:Como detener un [[boceto]] de Arduino.
;[[Tip 2]]:Como acceder a dispositivos desde fuera de la red sin IP publica fija.
;[[Tip 3]]:Diferencia entre [[delay()]] y [[millis()]]
;[[Tip 4]]:Como detectar el flanco de subida (RISSING) de un pulsador.
;[[Tip 5]]:Simplificar manejo masivo de pines.
== Vea también ==
<categorytree mode=all>Tips</categorytree>
== Referencias ==
* [http://arduino.land/FAQ/ Arduino Land]
[[Category:Tips]]
0qi6lph8jjzi88974l0qnv16dpiifmm
IsControl()
0
124
332
2018-06-18T22:02:30Z
Kike GL
2
Kike GL trasladó la página [[IsControl()]] a [[isControl()]]
wikitext
text/x-wiki
#REDIRECCIÓN [[isControl()]]
c7g0vejr4cc4s2pmgn2602wl9rd50fl
IsDigit()
0
125
334
2018-06-18T22:02:55Z
Kike GL
2
Kike GL trasladó la página [[IsDigit()]] a [[isDigit()]]
wikitext
text/x-wiki
#REDIRECCIÓN [[isDigit()]]
70jfxssi77zl3s2k7o0zwqgyhp5sqy7
IsGraph()
0
127
338
2018-06-18T22:04:25Z
Kike GL
2
Kike GL trasladó la página [[IsGraph()]] a [[isGraph()]]
wikitext
text/x-wiki
#REDIRECCIÓN [[isGraph()]]
oai7arfdvlacw4ixcsqrvdwvai3y0m9
IsHexadecimalDigit()
0
129
342
2018-06-18T22:05:10Z
Kike GL
2
Kike GL trasladó la página [[IsHexadecimalDigit()]] a [[isHexadecimalDigit()]]
wikitext
text/x-wiki
#REDIRECCIÓN [[isHexadecimalDigit()]]
fal97757cvlpuzhimc3agsuamzfn6zg
IsLowerCase()
0
123
330
2018-06-18T22:02:10Z
Kike GL
2
Kike GL trasladó la página [[IsLowerCase()]] a [[isLowerCase()]]
wikitext
text/x-wiki
#REDIRECCIÓN [[isLowerCase()]]
3u80bnjc6cbxeu050gcrmdz1vv2y84n
IsPrintable()
0
130
344
2018-06-18T22:06:33Z
Kike GL
2
Kike GL trasladó la página [[IsPrintable()]] a [[isPrintable()]]
wikitext
text/x-wiki
#REDIRECCIÓN [[isPrintable()]]
2rcfzsbhbxfnedoncffsxhsh09w8rlw
IsPunct()
0
126
336
2018-06-18T22:03:34Z
Kike GL
2
Kike GL trasladó la página [[IsPunct()]] a [[isPunct()]]
wikitext
text/x-wiki
#REDIRECCIÓN [[isPunct()]]
hoqwwav7zb4gq4f2pfhkq8a3neoyfe8
IsSpace()
0
132
348
2018-06-18T22:08:00Z
Kike GL
2
Kike GL trasladó la página [[IsSpace()]] a [[isSpace()]]
wikitext
text/x-wiki
#REDIRECCIÓN [[isSpace()]]
m2rdopfsaa2jo4htfxycbjwyee5jhem
IsUpperCase()
0
128
340
2018-06-18T22:04:49Z
Kike GL
2
Kike GL trasladó la página [[IsUpperCase()]] a [[isUpperCase()]]
wikitext
text/x-wiki
#REDIRECCIÓN [[isUpperCase()]]
d59y833gn6uwqbiia8e3v12n2zfit2l
IsWhiteSpace()
0
131
346
2018-06-18T22:07:04Z
Kike GL
2
Kike GL trasladó la página [[IsWhiteSpace()]] a [[isWhiteSpace()]]
wikitext
text/x-wiki
#REDIRECCIÓN [[isWhiteSpace()]]
th8gwiwmerulzo2s8tgrjtfbdwrjjrk
Joystick mouse control
0
280
1061
2018-06-26T21:33:36Z
Kike GL
2
Página creada con « == Placa aplicable == Todas. == Código == <syntaxhighlight lang="c++"> </syntaxhighlight> == Comentarios == == Vea también == * [[Button mouse control]] Category:M...»
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
* [[Button mouse control]]
[[Category:Mouse]]
8376k139t36z2f7uyvarnhxej7o4h83
Keyboard logout
0
277
1055
2018-06-26T21:30:19Z
Kike GL
2
Página creada con « == Placa aplicable == Todas. == Código == <syntaxhighlight lang="c++"> </syntaxhighlight> == Comentarios == == Vea también == * [[Keyboard logout]] * Keyboard repro...»
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
* [[Keyboard logout]]
* [[Keyboard reprogram]]
* [[Keyboard serial]]
* [[Keyboard mouse control]]
[[Category:Teclado]]
ec6mfuitnus4bmwbm7qpm4w7qu1who7
Keyboard message
0
273
1051
2018-06-26T21:29:28Z
Kike GL
2
Página creada con « == Placa aplicable == Todas. == Código == <syntaxhighlight lang="c++"> </syntaxhighlight> == Comentarios == == Vea también == * [[Keyboard logout]] * Keyboard repro...»
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
* [[Keyboard logout]]
* [[Keyboard reprogram]]
* [[Keyboard serial]]
* [[Keyboard mouse control]]
[[Category:Teclado]]
ec6mfuitnus4bmwbm7qpm4w7qu1who7
Keyboard mouse control
0
274
1052
2018-06-26T21:29:47Z
Kike GL
2
Página creada con « == Placa aplicable == Todas. == Código == <syntaxhighlight lang="c++"> </syntaxhighlight> == Comentarios == == Vea también == * [[Keyboard logout]] * Keyboard messa...»
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
* [[Keyboard logout]]
* [[Keyboard message]]
* [[Keyboard reprogram]]
* [[Keyboard serial]]
[[Category:Teclado]]
9ur5251qkpo08a1atn2noohorox8uwp
Keyboard reprogram
0
275
1053
2018-06-26T21:29:59Z
Kike GL
2
Página creada con « == Placa aplicable == Todas. == Código == <syntaxhighlight lang="c++"> </syntaxhighlight> == Comentarios == == Vea también == * [[Keyboard logout]] * Keyboard messa...»
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
* [[Keyboard logout]]
* [[Keyboard message]]
* [[Keyboard serial]]
* [[Keyboard mouse control]]
[[Category:Teclado]]
lfcn5q3umcl66w3wwu8qz9bhoqxhasf
Keyboard serial
0
276
1054
2018-06-26T21:30:10Z
Kike GL
2
Página creada con « == Placa aplicable == Todas. == Código == <syntaxhighlight lang="c++"> </syntaxhighlight> == Comentarios == == Vea también == * [[Keyboard logout]] * Keyboard messa...»
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
* [[Keyboard logout]]
* [[Keyboard message]]
* [[Keyboard reprogram]]
* [[Keyboard mouse control]]
[[Category:Teclado]]
lgfe7o9ksimqrte16a0fbt8wkh4m5pe
Keypad
0
497
5281
5280
2020-03-20T17:21:59Z
Kike GL
2
/* Parámetros */
wikitext
text/x-wiki
== Descripción ==
Un teclado matricial es un dispositivo que agrupa en filas y columnas (de alli el nombre matricial, 3x3, 3x4, 4x4) varios pulsadores y permite controlarlos usando un número de pines inferior al que necesitaríamos al usarlos de forma individual.
{{Tip|Al ser simples pulsadores actuaremos igual que con ellos, poniendo cada linea con un pull-up.}}
== Sintaxis ==
<pre>
#include <Keypad.h>
Keypad teclado = Keypad(makeKeymap(keys), rowPins, colPins, filas, columnas);
</pre>
== Parámetros ==
;keys:Matriz[filas][columnas] que contiene los caracteres representados
;rowPins:Pines digitales de filas
;colPins:Pines digitales de columnas
;filas:Numero de filas
;columnas:Numero de columnas
== Métodos ==
{| class="wikitable"
|+Métodos disponibles librería Keypad.h
|-
! Método !! Descripción
|-
| getKey() || Retorna el valor ASCII de una tecla presionada o liberada en un teclado USB conectado.
|-
| getKeys() ||
|-
| getState() ||
|-
| isPressed() ||
|-
| addEventListener() ||
|-
| keyStateChanged() ||
|-
| findKeyInList() ||
|-
| bitMap() ||
|-
| pin_mode() ||
|-
| pin_read() ||
|-
| pin_write ||
|-
| findKeyInList() ||
|-
| setDebounceTime() ||
|-
| setHoldTime() ||
|-
| waitForKey() ||
|}
== Comentarios ==
== Advertencias ==
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
#include <Keypad.h>
const byte ROWS = 4; //filas
const byte COLS = 3; //columnas
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //Pines para filas
byte colPins[COLS] = {8, 7, 6}; //Pines para columnas
Keypad teclado = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
char key = teclado.getKey();
if (key){
Serial.println(key);
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias ==
* [http://playground.arduino.cc/Code/Keypad Playground]
* [https://www.luisllamas.es/arduino-teclado-matricial Teclado matricial] - Luis Llamas
* [https://www.prometec.net/teclados-matriciales/ Teclado matricial] - Prometec
[[Category:Librerias]]
[[Category:Libreria Keypad]]
qkaqh6cbbvva0ayjppin4lfkfvufqyg
Knock
0
254
3738
1030
2019-05-06T22:09:25Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Sensores</categorytree>
== Referencias ==
[[Category:Sensores]]
phrz68vyt00mk72xrwh41yn8g07pld8
LCD
0
451
4634
4449
2019-07-04T16:29:38Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
La librería [https://github.com/arduino-libraries/LiquidCrystal LiquidCrystal] de Adafruid (AGO-2017), permite a un Arduino controlar un LCD (HD44780 y compatibles) via 4 u 8 bits de datos mas ademas de RS y Enable. Opcionalmente puedes usar la linea RW.
Mucho mas eficiente es la libreria [https://github.com/marcoschwartz/LiquidCrystal_I2C LiquidCrystal_I2C] de Frank de Brabander (NOV-2015), que permite a un Arduino controlar un LCD via el bus [[Wire|I2C]], pero tendras que usar un adaptador.
== Placas aplicables ==
Todas
== Sintaxis ==
<pre>
#include <LiquidCrystal.h>
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
LiquidCrystal lcd(rs, rw, en, d4, d5, d6, d7);
LiquidCrystal lcd(rs, en, d0, d1, d2, d3, d4, d5, d6, d7);
</pre>
== Parametros ==
;rs:el número del pin Arduino que está conectado al pin RS en la pantalla LCD.
;rw:el número del pin Arduino que está conectado al pin RW en la pantalla LCD (opcional). Si no se usa conectar a GND.
;en:el número del pin Arduino que está conectado al pin habilitar en la pantalla LCD.
;dx:el número del pin Arduino que está conectado a los pines de datos en la pantalla LCD.
== Métodos ==
{| class="wikitable"
|-
! Metodos !! Descripcion
|-
| begin(columnas, filas) || Inicializa la interfaz a la pantalla LCD y especifica las dimensiones de LCD.
|-
| setCursos(columna, fila) || Va a cierta posicion del LCD.
|-
| clear() || Limpia el LCD. <incluye un home().
|-
| home() || Va a la posicion 0,0 (arriba a la izquierda)
|-
| print(dato [, base]) || Imprime un dato tipo [[char]], [[byte]], [[int]], [[long]]. Retorna el numero de bytes escritos.
|-
| write(datos) || Escribe datos tipo [[string]] o [[String]] en LCD. Retorna el numero de bytes escritos.
|-
| cursor() || Muestre el cursor LCD: un guión bajo (línea) en la posición en la que se escribirá el siguiente carácter.
|-
| noCursor() || Esconde cursos LCD.
|-
| blink() || Hace parpadear al cursor.
|-
| noBlink() || Deja fijo el cursor.
|-
| display() || Vuelve a mostrar el contenido del LCD.
|-
| noDisplay() || Esconde el contenido del LDC.
|-
| autoscroll() || Activa el auto scroll.
|-
| noAutoscroll() || Desactiva el auto scroll.
|-
| scrollDisplayLeft() || Desplaza toda la pantalla una columna a la izquierda.
|-
| scrollDisplayRight() || Desplaza toda la pantalla una columna a la derecha.
|-
| leftToRight() || Establece sentido de escritura de izquierda a derecha.
|-
| rightToLeft() || Establece sentido de escritura de derecha a izquierda.
|-
| createChar() || Crea un caracter personalizado.
|-
| setRowOffsets() || Configura las direcciones de memoria donde se almacenan los caracteres del LCD.
|}
== Comentarios ==
== Advertencias ==
== Ejemplo 1 ==
Ejemplo de LCD con manejo directo de 4 bits.
<syntaxhighlight lang="c++">
/*
The circuit:
* LCD RS pin to digital pin 12
* LCD R/W pin to ground
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD VSS pin to ground
* LCD VCC pin to 5V
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
*/
#include <LiquidCrystal.h>
const int rs=12, en=11, d4=5, d5=4, d6=3, d7=2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
lcd.begin(16, 2); //Columnas, filas
lcd.print("Hola mundo...");
}
void loop() {
lcd.setCursor(0, 1); //Poner cursor en columna 0, fila 1
lcd.print(millis()/1000);
}
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2); //Columnas, filas
}
void loop() {
lcd.setCursor(0, 0);
for (byte i=0; i<10; i++) {
lcd.print(i);
delay(500);
}
lcd.setCursor(16, 1);
lcd.autoscroll(); //Prende scrolling
for (byte i=0; i<10; i++) {
lcd.print(i);
delay(500);
}
lcd.noAutoscroll(); //Apaga scrolling
lcd.clear(); //Limpia LCD
}
</syntaxhighlight>
== Ejemplo 3 ==
En este ejemplo creamos 5 caracteres especiales y los intercambiamos a velocidades distintas.
<syntaxhighlight lang="c++">
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
bool a,b;
byte heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000
};
byte smiley[8] = {
0b00000,
0b00000,
0b01010,
0b00000,
0b00000,
0b10001,
0b01110,
0b00000
};
byte frownie[8] = {
0b00000,
0b00000,
0b01010,
0b00000,
0b00000,
0b00000,
0b01110,
0b10001
};
byte armsDown[8] = {
0b00100,
0b01010,
0b00100,
0b00100,
0b01110,
0b10101,
0b00100,
0b01010
};
byte armsUp[8] = {
0b00100,
0b01010,
0b00100,
0b10101,
0b01110,
0b00100,
0b00100,
0b01010
};
void setup() {
lcd.begin(16, 2);
lcd.createChar(0, heart);
lcd.createChar(1, smiley);
lcd.createChar(2, frownie);
lcd.createChar(3, armsDown);
lcd.createChar(4, armsUp);
lcd.setCursor(0, 0);
lcd.print("I ");
lcd.write(byte(0)); //heart
lcd.print(" Arduino! ");
}
void loop() {
if (millis()%500 < 5){
lcd.setCursor(13, 0);
if (a){
lcd.write(1); //smiley
}else{
lcd.write(2); //frownie
}
a = !a;
}
if (millis()%200 < 5){
lcd.setCursor(4, 1);
if (b){
lcd.write(3); //armsDown
}else{
lcd.write(4); //armsUp
}
b = !b;
}
}
</syntaxhighlight>
== Ejemplo 4 ==
Recibimos un texto desde consola y lo escribimos en el LCD.
<syntaxhighlight lang="c++">
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop() {
if (Serial.available()) {
delay(100);
lcd.clear();
byte n = 0;
while (Serial.available()) {
lcd.write(Serial.read());
delay(20);
n++;
if (n 16){ //Igual
lcd.setCursor(0,1);
}
}
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
* [https://www.arduino.cc/en/Reference/LiquidCrystal LiquidCrystal]
* [http://diymakers.es/aprender-usar-un-display-lcd/ Aprender a usar un display LCD] - Diy Makers
* [https://eldesvandejose.com/2016/04/02/la-libreria-liquidcrystal/ La libreria LiquidCrystal] - El desvan de José
* [https://www.pjrc.com/teensy/td_libs_LiquidCrystal.html Liquid Crystal Library] - PJRC
[[Category:Librerias]]
h1jlv7qvc3oz2pqopyccb9ua4pesffw
LED BUILTIN
0
137
3785
3784
2019-05-06T22:57:39Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
Palabra reservada que identifica el LED a bordo. En prácticamente todo Arduino, está en el pin digital 13 (ese es el valor).
{{Nota|Es indispensable declarar primero con [[pinMode()]] en OUTPUT.}}
== Sintaxis ==
<pre>
pinMode(LED_BUILTIN, OUTPUT)
digitalWrite(LED_BUILTIN, estado);
</pre>
== Parámetros ==
;estado: debe ser LOW o HIGH. También puedes usar 0 o false como sinomino de LOW y cualquier valor diferente de cero o true como sinomimo de HIGH.
== Advertencias ==
Nota que LED_BUILTIN se debe escribir en mayúsculas.
== Ejemplo 1 ==
Ejemplo de parpadeo del LED a bordo con [[delay()]].
<syntaxhighlight lang="c++">
void setup(){
pinMode(LED_BUILTIN, OUTPUT)
}
void loop(){
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
</syntaxhighlight>
== Ejemplo 2 ==
Ejemplo de parpadeo del LED a borde sin usar [[delay()]].
<syntaxhighlight lang="c++">
unsigned long hora=0;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
if (millis() - hora > 500){
hora = millis();
if (digitalRead(LED_BUILTIN)){
digitalWrite(LED_BUILTIN, LOW); //LOW = false = 0
}else{
digitalWrite(LED_BUILTIN, HIGH); //HIGH = true = 1
}
}
}
</syntaxhighlight>
== Ejemplo 3 ==
Ejemplo de parpadeo del LED a borde sin usar [[delay()]] muy simple.
<syntaxhighlight lang="c++">
unsigned long hora=0;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
if (millis() - hora > 500){
hora = millis();
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN);
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Palabras reservadas</categorytree>
== Referencias externas ==
[[Category:Palabras reservadas]]
grvevsgxmhwxw6r42jz5nfbw5yuszc8
LedControl
0
500
5112
5111
2019-12-12T01:14:42Z
Kike GL
2
/* Ejemplo 1 */
wikitext
text/x-wiki
== Descripción ==
La libreria [https://github.com/wayoda/LedControl LedControl.h] de Eberhard Fahle para trabajar con MAX7219 o MAX7221 que maneja display 7 segmentos de catodo comun o matriz de LED 8x8.
== Sintaxis ==
<pre>
#include <LedControl.h>
LedControl lc = LedControl(DIN,CLK,CS,n);
</pre>
== Parámetros ==
;DIN:Entrada de datos (MOSI)
;CLK:Reloj (CSK)
;CS:Selector de chip (SS)
;n:Numero del MAX (0~7)
== Métodos ==
{| class="wikitable"
|+Metodos disponibles libreria LedControl.h
|-
! Método !! Descripción !! Ejemplo
|-
| lc.shutdown() || TRUE apaga, FALSE para operación normal. || lc.shutdown(0,false)
|-
| lc.setIntensity() || Determina el brillo (0 a 15) || lc.setIntensity(0,4)
|-
| lc.setScanLimit() || Numero de dígitos a usar 0~7 || lc.setScanLimit(0,3)
|-
| lc.clearDisplay() || || lc.clearDisplay(0)
|-
| lc.setDigit() || Muestra un digito decimal. addr,digit,valor,dp || lc.setDigit(0,dig,num,false)
|-
| lc.setChar() || '0','1','2','3','4','5','6','7','8','9','0','A','b','c','d','E','F','H','L','P','.','-','_',' ' || lc.setChar(0,0'A?,false)
|-
| lc.setLed() || addr,row,col,state (true=on) || lc.setLed(0,0,0,true)
|-
| lc.setRow() || addr,row,value || lc.setRow(0,0,1)
|-
| lc.setColumn() || addr,col,value || lc.setColumn(0,0,1)
|}
== Comentarios ==
* Notese que al estar diseñado para cátodo común (CC) las salidas de cada dígito (que van al cátodo) son reforzadas (320 mA) mientras que los segmentos (que van al ánodo) son las imitadoras de corriente (max 40 mA) determinadas por Rset. Ademas gracias a la multiplexion solo un dígito esta prendido a la vez.
* Para poner en cascada hasta ocho (8) MAX7219 se hacen comunes CLK (13) y LOAD (12). La data para el primer MAX7219 se mete en DIN (1) y para el siguiente se extrae de DOUT (25).
* Cada CHIP puede manejar hasta 8 digitos en cuyo caso cada uno prendera 125 ms. Si usas menos digitos en un MAX sebe usar setScanLimit(0,n), si n=3 solo se activan 4 digitos y cada uno prenderia 167 ms.
* Es importante entender que Rset es el control de brillo analógico y el método setIntensity() es el control de brillo digital, mediante modulación de PWM o ancho de pulso (Duty Cycle) entre 1/32 y 31/32. Para eso debemos ver en las especificaciones de nuestro LED la corriente máxima y la tensión directa. Por ejemplo si mi LED tiene una Imax de 25 mA y una tensión directa de trabajo de 2V elegiré Rset = 28kΩ, como no es comercial le pondré 33kΩ.
== Advertencias ==
* Rset puede ser variable (lo que permite un control de brillo analógico) pero su valor minimo absoluto es 9K53.
== Ejemplo 1 ==
Conectamos un MAX7219 con un display de 4 digitos y 7 segmentos y mostramos un contador ascendente en cada digito por un segundo y luego la palabra HELP durante 3 segundos.
<syntaxhighlight lang="c++">
#include <LedControl.h>
LedControl lc = LedControl(12,11,10,1); //El 1 al final indica cuantos MAX en cascada hay. Máximo 8.
void setup(){
//Despierta display
lc.shutdown(0,false);
//Pone brillo en medio
lc.setIntensity(0,8);
//Limita a solo 4 digitos
lc.setScanLimit(0,3);
//Limpia display
lc.clearDisplay(0);
}
void loop{
//Cuenta
for (byte n=0, n<10, n++) {
for (byte dig=0, dig<4; n++) {
//Muestra display
lc.setDigit(0, dig, n, false);
delay(1000);
}
}
lc.setChar(0,0,'H',false);
lc.setChar(0,1,'E',false);
lc.setChar(0,2,'L',false);
lc.setChar(0,3,'P',false);
delay(1000);
//Apaga display
lc.shutdown(0, true);
lc.clearDisplay(0);
delay(3000);
//Prende display
lc.shutdown(0, false);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias ==
* [https://www.arduinolibraries.info/libraries All Libraries]
* [https://www.maximintegrated.com/en/app-notes/index.mvp/id/1196 Using the MAX7219/7221 to drive higher voltage or current] - Maxim
* [https://www.prometec.net/8x8-max7219/ Matriz LED 8x8 con MAX7219 y SPI] - Prometec
* [https://naylampmechatronics.com/luces-iluminacion/265-kit-matriz-led-max7219.html Kit matriz LED MAX7219] - Naylamp Mechatronics
* [https://www.luisllamas.es/matriz-led-arduino-max7219/ Encender una matriz LED con MAX7219] - Luis Llamas
* [https://www.youtube.com/watch?v=Gc77CG5-TWo Capitulo 49 - Display 7 segmentos con MAX7219 y multiplexacion] - Bitwise Ar
[[Category:Librerias]]
[[Category:Libreria LedControl]]
i11xt1ubk158jrerkw9azhbvyvdlkpx
Librerias
0
111
4824
3173
2019-07-19T00:36:13Z
Kike GL
2
/* Sincronización */
wikitext
text/x-wiki
Esta página incluye una lista de librerías contribuidas por la comunidad para Arduino.
== Paginas huerfanas ==
* [[ChatServer]]
* [[UDPSendReceiveString]]
* [[WebClient]]
* [[WebClientRepeating]]
* [[WebServer]]
== Audio ==
* [[Rttl]] - Ejecuta melodias Rttl
* [[MusicWithoutDelay]] - Un algoritmo para tocar notas musicales más fácil, con la ayuda de la biblioteca de tonos de Bhagman, sin demora.
* [[SinpleSDAudio]]
* [[TMRpcm]] - Reproducción de audio PCM/WAV.
* [[AudioFrequencyMeter]] - Obtener el tono fundamental de una señal de audio
== Nube ==
* [[JustWifi]] - Administrador Wifi para ESP8266 (Xose Pérez)
== Comunicaciones ==
* [[Wire]] Interfaz de dos hilos (I2C) para enviar y recibir datos a través de una red de dispositivos o sensores.
* [[SoftWire]]
* [[Ethernet]] para conectarse a Internet usando Arduino Ethernet Shield, Arduino Ethernet Shield 2 y Arduino Leonardo ETH
* [[GSM]] para conectarse a una red GSM/GRPS con la protección GSM.
* [[SPI]] para comunicarse con dispositivos que utilizan el bus de Interfaz Periférica Serial (SPI)
* [[WiFi]] para conectarse a internet usando el escudo Arduino WiFi.
* [[OneWire]] Acceda a sensores de temperatura de 1 cable, memoria y otros chips.
* [[ArduinoMqtt]] Libreria de cliente MQTT para Arduino basada en el proyecto Eclipse Paho.
* [[Conector CMMC MQTT]] Libreria de conetctores MQTT
* [[MQTT]] Libreria MQTT para Arduino
* [[ESP32 BLE Arduino]] Funciones BLE para ESP32.
* [[Webbino]] es un servidor web para Arduino para NodeMCU.
== Criptografía ==
== Estructura de datos y algoritmos ==
== Gráficos de datos ==
== Domótica e IoT (Internet de las cosas) ==
== De entrada y salida ==
=== Botones y Debouncing ===
=== Control LED ===
=== Control LED múltiple ===
=== Otra entrada / salida ===
== Control LED ==
== Control LED multiple ==
== Otra entrada / salida ==
== Interrupciones ==
== LCD ==
=== Textuales LCD ===
=== Gráficos / LCD a color ===
== Matemáticas ==
== Menú ==
* [[LCDMenuLib]] - Una librería con la que puedes generar un menú basado en el modelo de conjunto anidado con múltiples capas.
* [[MD_Menu]] - Una librería para mostrar y administrar menús en pantallas con hasta 2 líneas.
== Control de movimiento ==
== Controladores de motor ==
== Robotica ==
== Control de poder ==
== Procesamiento de señales ==
== Programadores y pseudo sistemas operativos ==
== Sensores ==
== Almacenamiento de memoria ==
[[SD]] - Para la interacción con tarjetas SD (Secure Digital) y la manipulación de archivos (ficheros) y directorios (carpetas) que hay en ellas.
== Instrumentos de cuerda ==
== Pruebas, utilidades y ahorro de energia ==
== Sincronización ==
* [[Time]] - reloj de software en tiempo real.
* [[Metro]] - implementación de eventos temporizados recurrentes, como LED parpadeantes o control del servomotor.
* [[Chronos]] - Fácilmente manipular los tiempos de fecha para realizar la programación, calendarios de configuración y encontrar puntos en el tiempo que sean de su interés.
* [[RTC]] - reloj físico externo o por software.
== Vea también ==
== Referencias externas ==
* [http://arduino.cc/en/Reference/Libraries Bibliotecas oficiales de Arduino]
* [https://playground.arduino.cc/Main/LibraryList Libreries for Arduino]
* [https://www.arduinolibraries.info/libraries Arduino libraries]
[[Category:Librerias]]
o5r892yhr2mwsps738pe0rc857ww443
MEGA
0
454
4006
4005
2019-05-21T00:09:42Z
Kike GL
2
/* Puertos serie */
wikitext
text/x-wiki
== Descripción ==
El MEGA 2560 está diseñado para proyectos más complejos. Con 54 pines de E/S digitales, 16 entradas analógicas y un espacio más grande para su [[boceto]], es la placa recomendada para impresoras 3D y proyectos de robótica. Esto le da a sus proyectos un montón de espacio y oportunidades.
Basado en el microcontrolador ATmega2560. Tiene 54 pines de entrada/salida digital, de los cuales 15 se pueden usar como salidas PWM, 16 entradas analógicas, 4 UARTs (puertos serie de hardware), un oscilador de cristal de 16 MHz, una conexión USB, una clavija de alimentación, pines ICSP y un botón de reinicio.
== Características ==
{|class="wikitable"
|+Especificaciones técnicas
!Parámetro!!Valor
|-
|uC||ATmega2560
|-
|Bus||8 bits
|-
|Velocidad||16Mhz
|-
|Memoria [[flash]]||256KB (8KB para arranque)
|-
|Memoria [[SRAM]]||8KB
|-
|Memoria [[EEPROM]]||4KB
|-
|Alimentación||5V
|-
|Entrada||7~12V
|-
|Entrada limite||6~20V
|-
|Pines digitales||54 (15 PWM de 8 bits)
|-
|Pines analógicos||16
|-
|Corriente por pines||20 mA
|-
|[[LED_BUILTIN]]||13
|}
== Puertos serie ==
{| class="wikitable"
|+Puertos serie físicos
|-
! Texto de encabezado !! Rx !! Tx
|-
| Serie || 0 || 1
|-
| Serie1 || 19 || 18
|-
| Serie2 || 17 || 16
|-
| Serie3 || 15 || 14
|}
Los pines Rx y Tx se pueden usar para comunicaciones serie asíncronas.
Estos pines también están conectados internamente a través de resistencias de 1K al chip USB, de modo que los datos de la interfaz USB se pueden enviar/recibir a los pines 0 y 1.
== Bus I2C ==
Un protocolo '''Inter Integrated Circuit''' (también llamado TWI) usa una línea de reloj (SCL) junto con una línea de datos (SDA) para transferir información. Reloj serie
;SCL (Serial Clock Line): La línea de reloj. Pin 21. Usada por I2C para indicar datos está lista en la línea de datos.
;SDA (Serial Data Line): La línea de datos (bidireccional). Pin 20. Usada para datos seriales.
{{Nota|Para saber mas consulta la libreria [[Wire]].}}
== Polifusible ==
El MEGA 2560 tiene un polyfuse reiniciable que protege los puertos USB de su computadora de cortocircuitos y sobrecargas. Aunque la mayoría de las computadoras brindan su propia protección interna, el fusible brinda una capa adicional de protección. Si se aplican más de 500 mA al puerto USB, el fusible romperá automáticamente la conexión hasta que se elimine el cortocircuito o la sobrecarga.
== Vea también ==
* [[UNO]]
* [[NANO]]
== Referecias ==
[[Category:Placas]]
nmyv640nnfmhfhxydafmpbiyy73i7u8
MQTT
0
419
3226
2019-05-03T22:55:33Z
Kike GL
2
Página creada con «== Descripción == La librería [https://github.com/adafruit/Adafruit_MQTT_Library MQTT] de Adafruit... == Placas aplicables == == Sintaxis == <pre> </pre> == Métodos =...»
wikitext
text/x-wiki
== Descripción ==
La librería [https://github.com/adafruit/Adafruit_MQTT_Library MQTT] de Adafruit...
== Placas aplicables ==
== Sintaxis ==
<pre>
</pre>
== Métodos ==
== Comentarios ==
== Advertencias ==
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
[[Category:Librerias]]
5gl3tdi226uyb0agpkk9byl6qmx12os
Memsic2125
0
255
3739
1031
2019-05-06T22:09:44Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Sensores</categorytree>
== Referencias ==
[[Category:Sensores]]
phrz68vyt00mk72xrwh41yn8g07pld8
Midi
0
234
3744
1004
2019-05-06T22:12:11Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Comunicaciones</categorytree>
== Referencias ==
[[Category:Comunicaciones]]
d8atefw72kf74bl7caf89mtyl0c79fx
Multi serial MEGA
0
235
3745
1005
2019-05-06T22:12:30Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Comunicaciones</categorytree>
== Referencias ==
[[Category:Comunicaciones]]
d8atefw72kf74bl7caf89mtyl0c79fx
MySQL
0
420
4455
4454
2019-06-16T18:20:57Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
La librería [https://github.com/ChuckBell/MySQL_Connector_Arduino MySQL] de Charles Bell se puede usar para conectar su proyecto Arduino directamente a un servidor MySQL sin usar una computadora intermedia o un servicio web o basado en la nube.
Tener acceso directo a un servidor de base de datos significa que puede almacenar los datos adquiridos de su proyecto, así como verificar los valores almacenados en las tablas en el servidor. Esto también significa que puede configurar su propio servidor MySQL local para almacenar sus datos y eliminar la necesidad de conectividad a Internet. Si eso no es un problema, aún puede conectarse y almacenar datos en un servidor MySQL a través de su red, Internet o incluso en la nube.
== Placas aplicables ==
== Sintaxis ==
<pre>
#include <Ethernet.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
</pre>
== Métodos ==
{| class="wikitable"
|+Metodos de MySQL
|-
! Método !! Descripción
|-
| connect() || Conecta con la base de datos
|-
| execute() || Ejecuta una consulta
|-
| show_results() || Muestra el resultado de la consulta
|-
| field_struct() || Muestra la estructura de la tabla
|}
== Comentarios ==
== Advertencias ==
== Ejemplo ==
<syntaxhighlight lang="c++">
#include <Ethernet.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server_addr(192.168,1,35); //IP del servidor MySQL
char usuario[] = "root"; //usuario MySQL
char clave[] = ""; //Clave usuario MySQL
//Consulta
char query[] = "SELECT campo1 FROM base.tabla WHERE campo2 = 'Lima'";
EthernetClient client;
MySQL_Connection conn((Client *)&client);
//Crea instancia de conexion
MySQL_Cursor cur = MySQL_Cursor(&conn);
void setup() {
Serial.begin(115200);
Ethernet.begin(mac_addr);
Serial.println("Conectando...");
if (conn.connect(server_addr, 3306, usuario, clave)) {
delay(1000);
}else{
Serial.println("Fallo la conexion.");
}
}
void loop() {
row_values *row = NULL;
long head_count = 0;
delay(1000);
Serial.println("1) Demonstrating using a cursor dynamically allocated.");
// Initiate the query class instance
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
//Ejecutando la consulta
cur_mem->execute(query);
//Opcionalmente se extraen los nombres de columna
column_names *columns = cur_mem->get_columns();
// Read the row (we are only expecting the one)
do {
row = cur_mem->get_next_row();
if (row != NULL) {
head_count = atol(row->values[0]);
}
} while (row != NULL);
//Borrando el cursor de memoria
delete cur_mem;
// Show the result
Serial.print(" NYC pop = ");
Serial.println(head_count);
delay(500);
Serial.println("2) Demonstrating using a local, global cursor.");
// Execute the query
cur.execute(query);
// Fetch the columns (required) but we don't use them.
cur.get_columns();
// Read the row (we are only expecting the one)
do {
row = cur.get_next_row();
if (row != NULL) {
head_count = atol(row->values[0]);
}
} while (row != NULL);
// Now we close the cursor to free any memory
cur.close();
// Show the result but this time do some math on it
Serial.print(" NYC pop = ");
Serial.println(head_count);
Serial.print(" NYC pop increased by 12 = ");
Serial.println(head_count+12);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
[[Category:Librerias]]
pws6v29j7i4r30l1nn0aqaf980qblcw
NANO
0
376
4636
4161
2019-07-04T16:31:28Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
El Arduino Nano es una placa pequeña, compacta y fácil de usar basado en el ATmega328P (como [[UNO]]). Solo le falta la clavija de alimentación VCC, pero tiene el pin VIN y funciona con un cable USB Mini-B en lugar de uno estándar.
Esta basado en el uC ATmega328P de 8 bits a 16 MHz, perteneciente a la familia AVR de arquitectura RISC, 32 registros de trabajo, 3 temporizadores flexibles, UART serie, convertidos ADC de 14 canales de 10 bits. Encapsulado DIP de 28 pines.
== Características ==
{|class="wikitable"
|+Especificaciones técnicas
!Parámetro!!Valor
|-
|uC||ATmega328P
|-
|Bus||8 bits
|-
|Velocidad||16 Mhz
|-
|Memoria [[flash]]||32KB (2KB para arranque)
|-
|Memoria [[SRAM]]||2KB
|-
|Memoria [[EEPROM]]||1KB
|-
|Alimentación||5V
|-
|Entrada||7~12V
|-
|Entrada limite||6~20V
|-
|Pines digitales||14 (6 PWM de 8 bits)
|-
|Pines analógicos||8
|-
|Corriente por pines||40 mA
|-
|[[LED_BUILTIN]]||13
|}
== Interrupciones ==
Interrupciones externas: 2 y 3. Estos pines se pueden configurar para activar una interrupción en un valor bajo, un flanco ascendente (RISING) o descendente (FALLING), o un cambio en el valor (CHANGE). Vea la función [[attachInterrupt()]] para más detalles.
== Pines digitales ==
* Existen 14 pines digitales (0~13) que pueden ser configurados como entrada o salida digital.
* No debes meter o sacar mas de 40 mA en cada una.
* 6 de ellos están marcados con '''~''' y pueden ser usados como [[analogWrite()|PWM]]. 3, 5, 6, 9, 10 y 11.
* Deben ser previamente configurados con [[pinMode()]].
== Pines analógicos ==
* Los pines marcados A0~A7 se usan para hacer lecturas "analógicas" que son codificadas via un ADC. No es necesario usar [[pinMode()]].
* Cada entrada analógica tiene una resolución de 10 bits. Usando la función [[analogRead()]] se obtiene lectura entre 0 (para 0V) y 1023 (para 5V). El rango puede alterarse fácilmente usando la función [[map()]] y/o suministrando un voltaje diferente al pin AREF.
* Aquí puede poner alguna fuente de voltaje (de 0 a 5 V) como una "referencia de voltaje" precisa para las llamadas a la función [[analogRead()]].
* Los pines analógicos A0~A5 también pueden usarse para lectura/escritura digital. Para este propósito, puede referirse a ellos como pines 14~19. Los pines analógicos A6 y A7 no pueden ser usados como digitales.
== LEDs ==
* Un LED power marcado como ON.
* Tiene un LED incorporado en el pin digital 13 denominado [[LED_BUILTIN]]. Cuando el pin 13 esta en HIGH prende.
* Dos LEDs de transmision serie Tx/Rx.
Los LED de Tx y Rx en la placa parpadearán cuando los datos se estén transmitiendo a través del chip FTDI y la conexión USB a la computadora, pero no para la comunicación en serie en los pines 0 y 1.
== Botones ==
* Tiene un botón reset.
* Adicionalmente tiene un pin RST que con un LOW reiniciar el microcontrolador. Normalmente se usa para agregar un botón de reinicio con los modulos que bloquean el botón incorporado.
== ICSP ==
* Exiten un conectores ICSP conectado al ATmega328P.
* Se usa para programar el uC ATmega328P principal (el más común) o el procesador de interfaz USB ATmega16U2 (solo si es necesario).
* El sistema ICSP usa [[SPI]] con un protocolo integrado en los chips.
{|class="wikitable"
!pin!!Descripcion
|-
|1||MISO
|-
|2||5V
|-
|3||SCK
|-
|4||MOSI
|-
|5||RST
|-
|6||GND
|}
{{Nota|La programación también se realiza normalmente usando la interfaz serie asíncrona (pines D0 / D1) y un programa de gestor de arranque instalado.}}
== Puerto serie ==
Los pines 0 (Rx) y 1 (Tx) se pueden usar para comunicaciones serie asíncronas.
Estos pines también están conectados internamente a través de resistencias de 1K al chip USB, de modo que los datos de la interfaz USB se pueden enviar/recibir a los pines 0 y 1.
Un FTDI FT232RL en la placa canaliza esta comunicación serie a través de USB y los controladores FTDI (incluidos con el software Arduino) proporcionan un puerto de comunicaciones virtual con una computadora.
{{Nota|La libreria [[SoftwareSerial]] permite la comunicación en serie por cualquiera de los pines digitales del Nano.}}
== Bus I2C ==
Un protocolo '''Inter Integrated Circuit''' (también llamado TWI) usa una línea de reloj (SCL) junto con una línea de datos (SDA) para transferir información. Reloj serie
;SCL (Serial Clock Line): La línea de reloj. Pin A5. Usada por I2C para indicar datos está lista en la línea de datos.
;SDA (Serial Data Line): La línea de datos (bidireccional). Pin A4. Usada para datos seriales.
{{Nota|Para saber mas consulta la libreria [[Wire]].}}
== Bus SPI ==
Un protocolo '''Serial Peripheral Interface''' usa una línea de reloj (SCK) junto con datos de maestro a esclavo (MOSI) y esclavo a maestro (MISO) para transferir información. También se usa comúnmente una línea de selección de esclavos (SS) para seleccionar un esclavo de entre múltiples.
;SCK (Serial Clock): Pin 13. Una línea de reloj generada por el maestro para "reloj" de datos al esclavo.
;MOSI (Master Out, Slave In): Pin 12. Los datos van del maestro al esclavo.
;MISO (Master In, Slave Out): Pin 11. Los datos van del esclavo al maestro.
;SS (Slave Select): Pin 10. Usado para seleccionar un esclavo. Típicamente se baja para estar activo.
{{Nota|Revisa la libreria [[SPI]] para saber como usarlo.}}
== Rangos máximos ==
Los pines IO tienen una calificación máxima absoluta de 40 mA por pin. Sin embargo, en la práctica, debe diseñar para que una clasificación de 20 mA sea segura.
Además, los siguientes grupos de pines no deben hundirse más de 100 mA (cada grupo):
* Pines digitales del D0 a D4
* Pines digitales del D5 al D13
* Pines analógicos del A0 a A7
{|class="wikitable col1cen"
|+Banco de puertos ATmega328p
!Puerto!!2<sup>7</sup>!!2<sup>6</sup>!!2<sup>5</sup>!!2<sup>4</sup>!!2<sup>3</sup>!!2<sup>2</sup>!!2<sup>1</sup>!!2<sup>0</sup>
|-
|B||||||D13||D12||D11||D10||D9||D8
|-
|C||A7||A6||A5||A4||A3||A2||A1||A0
|-
|D||D7||D6||D5||D4||D3||D2||D1||D0
|-
!Puerto!!128!!64!!32!!16!!8!!4!!2!!1
|}
Además de eso, todo el chip del procesador tiene una calificación máxima de consumo de corriente de 200 mA.
Estas cifras generalmente se refieren a los pines en el modo de salida (el modo de entrada no consumirá mucha potencia). De modo que puede ver que, configurados como salidas, solo podría tener 10 pines que suministran 20 mA cada uno (para evitar exceder el máximo del chip) e incluso entonces tendrían que extenderse para que no consuma más de 100 mA de un grupo mencionado anteriormente.
== Resistencias limitadoras de corriente ==
* Como regla general, si conecta un LED a un pin digital configurado como salida, querrá algo así como una resistencia de 330 ohm en serie con el diodo. * Esto se debe a que desea extraer algo así como 10 mA de corriente, con una caída de voltaje de 3V3 (el diodo cae 1V7, por lo que la resistencia suelta los otros 3V3 de un suministro de 5V). Usando la ley de Ohms, 3.3 / 0.010 = 330 ohmios.
{{Nota|Incluso una resistencia de 1K proporciona una salida de LED razonablemente brillante, y solo consume alrededor de 3.3 mA.}}
== Fuente de alimentación ==
La placa se puede alimentar desde el conector USB para probar mientras está conectado a una computadora o con una fuente de 5V.
Si usa un suministro externo, se recomienda un rango de voltaje entre 7~12V (por ejemplo, se podría usar una batería de 9V) por el pin VIN.
Tenga en cuenta que cuanto mayor sea el voltaje, más trabajo debe hacer el regulador de voltaje para "tirar" el exceso de voltaje, de modo que con un suministro de 12V o mas y alimentando bastantes "periféricos", es probable que el regulador de voltaje se caliente.
Por otro lado, el circuito interno está diseñado para cambiar de USB a externo si el suministro externo excede 6V6, por lo que el suministro de mucho menos de 7V probablemente no funcionará correctamente.
== Polifusible ==
== Vea también ==
* [[UNO]]
* [[MINI]]
* [[MICRO]]
* [[MEGA]]
* [[DUE]]
* [[101]]
* [[LEONARDO]]
* [[MKR1000]]
== Referencias externas ==
* [https://www.arduino.cc/en/uploads/Main/Arduino_Nano-Rev3.2-SCH.pdf Esquema]
* [http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf Datasheat 328P] - Microchip
* [http://www.gammon.com.au/uno Arduino UNO] - Nick Gammon
* [http://manueldelgadocrespo.blogspot.com/p/modelos_29.html Modelos de Arduino] - Manuel Delgado
* [https://descubrearduino.com/elegir-la-placa-arduino-adecuada-para-tu-proyecto-una-introduccion/ Que modelo comprar] - Descubre Arduino
* [https://aprendiendoarduino.wordpress.com/2016/11/06/hw-arduino-a-fondo/ Arduino a fondo] - Enrique Crespo
* [http://diymakers.es/guia-arduino/ Guia Arduino] - Diy Makers
[[Category:Placas]]
66vgmrkzzc0ht4mvzrxdr26jrzugg27
NodeMCU
0
487
4891
4890
2019-09-18T17:03:21Z
Kike GL
2
/* Ejemplo 1 */
wikitext
text/x-wiki
== Descripción ==
NodeMCU integra el ESP8266 con un modulo WiFi (ESP-12E). Este módulo tiene, además del microprocesador (Tensilica), una antena PCB, un LED conectado al GPIO2 y una memoria flash de 16 Mbit (= 4 MB). Es un proyecto de código abierto, el firmware y el diseño hardware esta disponible en GitHub.
Cuando fue presentada, no existía la integración de ESP8266 con el entorno de [[IDE]] de Arduino. No usaba un lenguaje compilado sino uno interpretado llamado LUA. Como todas las placas que usan ESP8266, se les puede cargar cualquier firmware. Puede usarse desde el propio de NodeMCU con lenguaje LUA, a MicroPython. También se puede usar como una placa de Arduino, donde nosotros hacemos el firmware desde cero.
== Caracteristicas ==
{|class="wikitable"
|+Especificaciones técnicas
!Parámetro!!Valor
|-
|uC||Tensilica ESP8266
|-
|Bus||32 bits
|-
|Velocidad||80-160 MHz
|-
|Memoria [[flash]]||4MB (512KB normal)
|-
|Memoria [[SRAM]]||2KB
|-
|Memoria [[EEPROM]]||1KB
|-
|Alimentación||5V (USB)
|-
|Entrada||3V3
|-
|Pines digitales||13 (6 PWM de 8 bits)
|-
|Pines analógicos||1 (A0) de ADC de 10 bits
|-
|Corriente por pines||12 mA
|-
|WiFi||2.4 GHz, 802.11, max 5 simultaneas
|}
== Pines ==
{|class="wikitable"
|+Especificaciones técnicas
!Pin!!GPIO!!Nombre
|-
|D0||16||Digital 0 (LED)
|-
|D1||5||Digital 1
|-
|D2||4||Digital 2
|-
|D3||0||Digital 3
|-
|D4||2||Digital 4 (LED ESP-12E)
|-
|D5||14||Digital 5
|-
|D6||12||Digital 6
|-
|D7||13||Digital 7
|-
|D8||15||Digital 8
|-
|D9||3||Digital 9
|-
|D10||1||Digital 10
|-
|VIN||+5V (USB)
|-
|3V||+3.3V
|-
|G||GND
|}
== Pines digitales ==
* Tenemos 11 pines de entrada/salida digital. Pero no te recomiendo usar los pines 6~11 porque están conectados a la memoria flash.
== PWM ==
* ESP8266 tiene cuatro (4) salidas PWM.
* El rango de frecuencia es de 100 Hz a 1 KHz.
== Pines analogicos ==
* El ESP8266 tiene un solo puerto análogo (A0) con ADC de 10 bits.
== LEDs ==
* LED1: D4 y pertenece al ESP-12E.
* LED2: D0 es de la propia placa, parpadea durante la carga de un programa
== Botones ==
* Tiene dos botones: RST (reset) y FLASH, que permite activar el modo de carga de firmware.
* Si usamos el [[IDE]] Arduino no son necesarios.
;RST:Reset, reinicia la placa pero no borra código.
;FLASH:Dejar estado de ejecución y pasar a estado de recibir código.
== Puerto serie ==
* El puerto serie esta en pin 1 (Rx) y pin 3 (Tx), están protegidos con resistencias de 470 ohms.
;Rx0: GPIO 3
;Tx0: GPIO 1
;Rx1: GPIO 2
;Tx1: GPIO 8
== I2c bus ==
* Soporta i2c maestro y esclavo.
* Frecuencia maxima 100 kHz
;SCL: GPIO 14
;SDA: GPIO 2
== Sintaxis ==
<pre>
WiFi.mode(WIFI_STA); //Modo cliente WiFi
WiFi.begin(ssid, clave);
</pre>
== Ventajas ==
* Bajo precio, mucho menor que Arduino
* WiFi incorporado
== Desventajas ==
* No muy intuitivo las referencias entre numero de pin y puerto GPIO.
* Alimantacion de 3.3 V
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
#define LED_BUILTIN 2
#define BUTTON_BUILTIN 0
void setup() {
pinMode(2, OUTPUT);
pinMode(0, INPUT);
}
void loop() {
int estado = digitalRead(0);
digitalWrite(2, estado);
}
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup() {
pinMode(D2, OUTPUT);
}
void loop() {
//El LED tiene una resistencia pull-up, por eso se enciende con LOW
digitalWrite(D2, LOW);
delay(1000); //Esperar un segundo
//Apagar el LED
digitalWrite(D2, HIGH);
delay(1000); //Esperar un segundo
}
</syntaxhighlight>
== Vea tambien ==
* [[UNO]]
* [[NANO]]
* [[MEGA]]
== Referencias externas ==
* [https://www.espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf ESP8266 datasheat] - Espressif
[[Category:Placas]]
7sfsvbtutnterpgtdbklw79v96caclc
OPC
0
491
4938
4937
2019-09-21T14:56:02Z
Kike GL
2
/* OPC server for Arduino */
wikitext
text/x-wiki
== Descripción ==
OLE for Process Control (OPC), que significa Enlace e Incrustación de Objetos (OLE) para Control de Procesos, es el nombre original para una especificación de estándares desarrollada en 1996 por un grupo de trabajo de la industria de automatización industrial. El estándar especifica la comunicación de datos de planta en tiempo real entre dispositivos de control de diferentes fabricantes.
== OPC server for Arduino ==
Es un servidor OPC fácil de usar y configurar que le permite conectar su Arduino con cualquier compilador OPC [[SCADA]].
Simplemente use la libreria [https://github.com/SoftwareTools4Makers/OPC OPC.h] en su [[boceto]] Arduino, publique sus artículos y proporcione datos para cada artículo que publicó en tiempo real. Puede recuperar/enviar información desde/hacia su software [[SCADA]] HMI para crear aplicaciones industriales.
== Ejemplo ==
<pre>
#include <OPC.h>
OPCSerial aOPCSerial; //Instancia el objeto
const byte analogPin = 3;
//create a callback function for the OPCItem
int callback(const char *itemID, const opcOperation opcOP, const int value){
return analogRead(analogPin);
}
void setup() {
Serial.begin(9600);
aOPCSerial.setup(); //Inicializa objeto
aOPCSerial.addItem("A0",opc_read, opc_int, callback);
}
void loop() {
//OPC process commands
aOPCSerial.processOPCCommands();
}
</pre>
== Vea también ==
* [[SCADA]]
* [[PLC]]
* [[PIC]]
== Referencias externas ==
* [https://www.st4makers.com/ OPC server for Arduino]
56u1y88iov49zntwj9g47jb2c1ytnvn
PCINT
0
492
4958
4957
2019-09-23T23:03:36Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripcion ==
Existen dos tipos de interrupciones externas:
* INT, interrupciones de harware externo
* PCINT, interrupciones Pin Change, que actual a nivel de bancos completos.
== Sintaxis ==
<pre>
PCICR;
PCMSK0;
PCIFR;
ISP(PCINT0_vect) //D8 a D13
ISP(PCINT1_vect) //A0 a A5
ISP(PCINT2_vect) //D0 a D7
</pre>
== Puertos INT ==
{|class="wikitable"
|+Arduino [[UNO]] y [[NANO]]
|-
!Pin!!Port!!INT
|-
|2||PD2||INT0
|-
|3||PD3||INT2
|}
{|class="wikitable"
|+Arduino [[MEGA]]
|-
!Pin!!Port!!INT
|-
|6||PE4||INT4
|-
|7||PE5||INT5
|-
|43||PD0||INT0
|-
|44||PD1||INT1
|-
|45||PD3||INT2
|-
|46||PD6||INT3
|}
== Puertos PCINT ==
{|class="wikitable"
|+Arduino [[UNO]] y [[NANO]]
|-
!Pin!!Port!!PCINT!!Pin!!Port!!PCINT!!Pin!!Port!!PCINT
|-
|2||PD2||PCINT18||8||PB0||PCINT0||A0||PC0||PCINT8
|-
|3||PD3||PCINT19||9||PB1||PCINT1||A1||PC1||PCINT9
|-
|4||PD4||PCINT20||10||PB2||PCINT2||A2||PC2||PCINT10
|-
|5||PD5||PCINT21||11||PB3||PCINT3||A3||PC3||PCINT11
|-
|6||PD6||PCINT22||12||PB4||PCINT4||A4||PC4||PCINT12
|-
|7||PD7||PCINT23||13||PB5||PCINT5||A5||PC5||PCINT13
|}
{|class="wikitable"
|+Arduino [[UNO]] y [[NANO]]
|-
!Pin!!Port!!PCINT!!Pin!!Port!!PCINT!!Pin!!Port!!PCINT
|-
|10||PB4||PCINT4||SS||PCINT0||PB0||A8||PK0||PCINT16
|-
|11||PD7||PCINT5||SCK||PCINT1||PB1||A9||PK1||PCINT17
|-
|12||PD7||PCINT6||MOSI||PCINT2||PB2||A10||PK2||PCINT18
|-
|13||PD7||PCINT7||MISO||PCINT3||PB3||A11||PK3||PCINT19
|-
|14||PD7||PCINT10||-||-||-||A12||PK4||PCINT20
|-
|15||PD7||PCINT9||-||-||-||A13||PK5||PCINT21
|-
| -||-||-||-||-||-||A14||PK6||PCINT22
|-
| -||-||-||-||-||-||A15||PK7||PCINT23
|}
== Advertencias ==
== Ejemplo ==
<syntaxhighlight lang="c++">
// Activar PCINT en un PIN
void pciSetup(byte pin){
*digitalPinToPCMSK(pin) |= bit (digitalPinToPCMSKbit(pin)); //activar pin en PCMSK
PCIFR |= bit (digitalPinToPCICRbit(pin)); //limpiar flag de la interrupcion en PCIFR
PCICR |= bit (digitalPinToPCICRbit(pin)); //activar interrupcion para el grupo en PCICR
}
// Definir ISR para cada puerto
ISR(PCINT0_vect) {
//gestionar para PCINT para D8 a D13
}
ISR(PCINT1_vect){
//gestionar PCINT para A0 a A5
}
ISR(PCINT2_vect){
//gestionar PCINT para D0 a D7
}
void setup(){
//Activar las PCINT para distintos pins
pciSetup(7);
pciSetup(8);
pciSetup(9);
pciSetup(A0);
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea tambien ==
* [[INT]]
== Referencias externas ==
* [https://www.luisllamas.es/interrupciones-en-todos-los-pines-de-arduino-con-pcint/ PCINT] - Luis Llamas
8bi45n42fzwhr858tktyiit6orwwvha
PHPoC
0
421
3228
2019-05-03T23:04:05Z
Kike GL
2
Página creada con «== Descripción == La librería [https://github.com/phpoc/arduino PHPoC] de Sollae Systems... == Placas aplicables == == Sintaxis == <pre> </pre> == Métodos == == Come...»
wikitext
text/x-wiki
== Descripción ==
La librería [https://github.com/phpoc/arduino PHPoC] de Sollae Systems...
== Placas aplicables ==
== Sintaxis ==
<pre>
</pre>
== Métodos ==
== Comentarios ==
== Advertencias ==
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
* [http://www.phpoc.com/ PHPoC] - Sollae Systems
[[Category:Librerias]]
m24x947nspdx9w7kmem2n74iqm9z4ql
PI
0
136
4467
4466
2019-06-24T22:31:48Z
Kike GL
2
/* Ejemplo 1 */
wikitext
text/x-wiki
== Descripción ==
Es la constante '''Pi''' (π), también conocida como la circunferencia de un círculo "base".<br>
Su valor se aproxima a 3.14159265358979323846; sin embargo, para efectos de un programa de Arduino, este valor acaba siendo truncado según la limitación de un [[double]] o [[float]].
== Sintaxis ==
<pre>
PI
HALF_PI
TWO_PI
</pre>
== Advertencias ==
* Nota que '''PI''', '''HALF_PI''' y '''TWO_PI''' se debe escribir en mayusculas.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
Serial.println(sin(0), 3); //0.000
Serial.println(sin(HALF_PI/2), 3); //0.707
Serial.println(sin(HALF_PI), 3); //1.000
Serial.println(sin(PI), 3); //0.000
Serial.println(sin(PI+HALF_PI), 3); //-1.000
Serial.println(sin(TWO_PI), 3);} //0.000
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
}
void loop(){
for (float n=0; n<TWO_PI; n+=0.01){
Serial.println(sin(n));
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Palabras reservadas</categorytree>
== Referencias externas ==
[[Category:Palabras reservadas]]
[[Category:Funciones trigonometricas]]
tcvkz3f4ytukpb88zafsrye26ljuuai
PIC
0
384
4933
4436
2019-09-21T14:32:22Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Peripheral Interface Controller (PIC) o controlador de interfaz periférico son una familia de microcontroladores (uC) tipo RISC fabricados por '''Microchip Technology Inc''' y basado en el PIC1650, originalmente desarrollado por la división de microelectrónica de General Instrument.
== Características ==
Los PIC actuales vienen con una amplia gama de mejoras hardware incorporadas:
* Núcleos de CPU de 8/16 bits con Arquitectura Harvard modificada
* Memoria Flash y ROM disponible desde 256 bytes a 256 kilobytes
* Memoria EEPROM interna con duración de hasta un millón de ciclos de lectura/escritura
* Puertos de entrada/salida (típicamente 0 a 5.5 voltios)
* Temporizadores de 8/16/32 bits
* Tecnología Nanowatt para modos de control de energía
* Periféricos serie síncronos y asíncronos: USART, AUSART, EUSART
* Conversores analógico/digital de 8-10-12 bits
* Comparadores de tensión
* Módulos de captura y comparación PWM
* Controladores LCD
* Periférico MSSP para comunicaciones I²C, SPI, y I²S
* Periféricos de control de motores
* Soporte de interfaz USB
* Soporte de controladores: Ethernet; CAN; LIN; Irda.
== Programación ==
Para transferir el código de un ordenador al PIC normalmente se usa un dispositivo llamado programador. La mayoría de PIC que Microchip distribuye hoy en día incorporan ICSP (In Circuit Serial Programming, programación serie incorporada) o LVP (Low Voltage Programming, programación a bajo voltaje), lo que permite programar el PIC directamente en el circuito destino. Para la ICSP se usan los pines RB6 y RB7 (En algunos modelos pueden usarse otros pines como el GP0 y GP1 o el RA0 y RA1) como reloj y datos y el MCLR para activar el modo programación aplicando un voltaje de 13 voltios. Existen muchos programadores de PIC, desde los más simples que dejan al software los detalles de comunicaciones, a los más complejos, que pueden verificar el dispositivo a diversas tensiones de alimentación e implementan en hardware casi todas las funcionalidades. Muchos de estos programadores complejos incluyen ellos mismos PIC preprogramados como interfaz para enviar las órdenes al PIC que se desea programar. Uno de los programadores más simples es el TE20, que utiliza la línea TX del puerto RS-232 como alimentación y las líneas DTR y CTS para mandar o recibir datos cuando el microcontrolador está en modo programación. El software de programación puede ser el ICprog, muy común entre la gente que utiliza este tipo de microcontroladores. Entornos de programación basados en intérpretes BASIC ponen al alcance de cualquiera proyectos que parecieran ser ambiciosos.
Se pueden obtener directamente de Microchip muchos programadores/depuradores (octubre de 2005):
* PICStart Plus (puerto serie y USB)
* Promate II (puerto serie)
* MPLAB PM3 (puerto serie y USB)
* ICD2 (puerto serie y USB)
* ICD3 (USB)
* PICKit 1 (USB)
* IC-Prog 1.06B
* PICAT 1.25 (puerto USB2.0 para PIC y Atmel)
* WinPic 800 (puerto paralelo, serie y USB)
* PICKit 2 (USB)
* PICKit 3 (USB)
* Terusb1.0
* Eclipse (PIC y AVR. USB)
* MasterProg (USB)
== Vea también ==
* [[PLC]]
* [[AVR]]
* [[FPGA]]
* [[SCADA]]
== Referencias ==
[[Category:Placas]]
mds8sptvbi0bpfo9gmpinmqlnjqnqot
PID
0
417
3266
3265
2019-05-04T14:53:03Z
Kike GL
2
/* Métodos */
wikitext
text/x-wiki
== Descripción ==
Un controlador Proporcional Integral Derivativo PID calcula un valor de "error" como la diferencia entre una entrada '''Input''' medida y un punto de referencia '''setPoint''' deseado. El controlador intenta minimizar el error ajustando la salida '''Output'''. La librería PID_v1.h requiere de tres paramentos kp, ki y kd.
== Placas aplicables ==
== Sintaxis ==
<pre>
PID(&Input, &Output, &Setpoint, Kp, Ki, Kd, Direction);
</pre>
== Parámetros ==
;Input:
;&Output:
;&Setpoint:
;Kp:
;Ki:
;Kd:
;Direction:
== Métodos ==
Aunque un controlador PID está diseñado para funcionar con una salida analógica, es posible conectarlo a una salida didital, como un relé. En este caso se debe definir un ciclo de trabajo y lo que hace el PID en establecer la proporcion entre HIGH y LOW mediante los metodos: SetSampleTime(ciclo) y SetAoutputLimits(min,max)
{| class="wikitable"
|+Métodos libreria PID
|-
!Método!!Descripción
|-
|Computer()||Calcula una nueva salida cada ciclo. Responde verdadero si se calculo.
|-
|SetMode(modo)||Especifica si PID esta AUTOMATIC o MANUAL
|-
|SetOutputLimits(min,max)||Especifica el rango de salida
|-
|SetSampleTime(ciclo)||Determina el ciclo, predetreminado es 200 ms
|-
|SetTunings(kp,ki,kd)||Permite reajustar los parámetros iniciales de reaccion del PID
|-
|SetControlDirection(dirección)||Especifica si la salida es DIRECT o REVERSE.
|}
== Comentarios ==
== Advertencias ==
== Ejemplo 1 ==
Lectura de entrada analogica A0 para controlar salida analogica PWM D3
<syntaxhighlight lang="c++">
#include <PID_v1.h>
float Input, Output, Setpoint;
PID miPID(&Input, &Output, &Setpoint, 2, 5, 1, DIRECT);
void setup(){
Setpoint = 100;
miPID.SetMode(AUTOMATIC);
}
void loop(){
Input = analogRead(0);
miPID.Compute();
//Señal PWM
analogWrite(3,Output);
}
</syntaxhighlight>
== Ejemplo 2 ==
Lectura de entrada analogica A0 para controlar salida digital D6 con un ciclo de trabajo de 5 segundos. Por eso se establece la salida del PID entre 0 y 5 segundos de modo que el PID ajustara el % de tiempo que el rele esta activado durante cada ciclo.
<syntaxhighlight lang="c++">
#include <PID_v1.h>
float Input, Output, Setpoint;
PID miPID(&Input, &Output, &Setpoint, 2, 5, 1, DIRECT);
int ciclo = 5000;
unsigned long StartTime, now;
void setup(){
pinMode(6, OUTPUT);
Setpoint = 100;
miPID.SetOutputLimits(0, ciclo);
miPID.SetMode(AUTOMATIC);
StartTime = millis();
}
void loop(){
now = millis();
if (now - StartTime > ciclo){
StartTime += ciclo;
}
Input = analogRead(0);
miPID.Compute();
if (Output > now - StartTime){
digitalWrite(6, HIGH);
}else{
digitalWrite(6, LOW);
}
}
</syntaxhighlight>
== Ejemplo 3 ==
Uno de los beneficios de la esta libreria es que se puedes cambiar los parámetros de ajuste (kp, ki, kd) en cualquier momento. Esto puede ser útil si queremos que el PID sea agresivo algunas veces y conservador en otros.
<syntaxhighlight lang="c++">
#include <PID_v1.h>
float Input, Output, Setpoint;
float aggKp=4, aggKi=0.2, aggKd=1; //PID agresivo
float consKp=1, consKi=0.05, consKd=0.25; //PID conservador
PID miPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);
void setup(){
pinMode(3, OUTPUT);
Setpoint = 100;
miPID.SetMode(AUTOMATIC);
}
void loop(){
Input = analogRead(0);
double gap = abs(Setpoint-Input);
if (gap<10){
miPID.SetTunings(consKp, consKi, consKd);
}else{
miPID.SetTunings(aggKp, aggKi, aggKd);
}
miPID.Compute();
//Señal PWM
analogWrite(3,Output);
}
</syntaxhighlight>
== Ejemplo 4 ==
Configurar el PID para usar P_ON_M hacer que la salida se mueva más suavemente cuando el punto de ajuste (Setpoint) está cambiado. Además, puede eliminar el sobrepico en ciertos procesos. Las opciones son: P_ON_M (Proportional ON Measurement) y P-ON_E (Proportional ON Err).
<syntaxhighlight lang="c++">
#include <PID_v1.h>
float Input, Output, Setpoint;
PID miPID(&Input, &Output, &Setpoint, 2, 5, 1, P_ON_M, DIRECT);
void setup(){
pinMode(3, OUTPUT);
Setpoint = 100;
miPID.SetMode(AUTOMATIC);
}
void loop(){
Input = analogRead(0);
miPID.Compute();
//Señal PWM
analogWrite(3, Output);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
[[Category:Librerias]]
3ek4hz2db90tx89pnebxdurfa042mdc
PLC
0
383
4928
4435
2019-09-21T14:27:55Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Un Programmable Logic Controller (PLC) o '''controlador lógico programable''', es una computadora usada en la automatización industrial, para automatizar procesos electromecánicos, tales como el control de la maquinaria de la fábrica en líneas de montaje o atracciones mecánicas.
El PLC está diseñado para contener múltiples señales de entrada y salida; amplios rangos de temperatura; inmunidad al ruido eléctrico; resistencia a la vibración y al impacto. Los programas para el control de funcionamiento de la máquina se suelen almacenar en baterías, copia de seguridad o en memorias no volátiles. Un PLC es un ejemplo de un sistema de tiempo real, donde los resultados de salida deben ser producidos en respuesta a las condiciones de entrada dentro de un tiempo limitado, de lo contrario no producirá el resultado deseado.
{{Nota|Arduino en un pequeño PLC, que no cumple con los estándares industriales. Gracias a su bajo precio (menos a US $ 25) y código abierto, cuenta con una gran comunidad de usuarios y por la gran cantidad de periféricos disponibles, con el se puede hacer cosas mucho mas complejas que un PLC comercial que puede costar hasta US $1000.}}
== Historia ==
Su historia se remonta a finales de la década de 1960, cuando la industria buscó en las nuevas tecnologías electrónicas una solución más eficiente para reemplazar los sistemas de control basados en circuitos eléctricos con relés, interruptores y otros componentes comúnmente usados para el control de los sistemas de lógica combinacional.
En 1968 GM Hydramatic (la división de transmisión automática de General Motors) emitió una solicitud de propuestas para un reemplazo electrónico de los sistemas cableados de relés. La propuesta ganadora vino de Bedford Associates. El resultado fue el primer PLC, designado 084 porque era el proyecto de Bedford Associates nº 84. Bedford Associates comenzó una nueva empresa dedicada al desarrollo, fabricación, venta y mantenimiento de este nuevo producto: Modicon (MOdular DIgital CONtroler). Una de las personas que trabajaron en ese proyecto fue Dick Morley, quien es considerado como el '''padre''' del PLC. La marca Modicon fue vendida en 1977 a Gould Electronics, y posteriormente adquirida por la compañía alemana AEG y luego por la francesa Schneider Electric, el actual propietario.
== Ventajas ==
Dentro de las ventajas que estos equipos poseen se encuentra que, gracias a ellos, es posible ahorrar tiempo en la elaboración de proyectos, pudiendo realizar modificaciones sin costos adicionales. Por otra parte, son de tamaño reducido y mantenimiento de bajo costo, además permiten ahorrar dinero en mano de obra y la posibilidad de controlar más de una máquina con el mismo equipo.
* Cumplen normas industriales internacionales
* Están probados en ambientes industriales
* Se programan en lenguaje de lógica de escalera (esta estandarizado)
* También se pueden programar en lenguajes de bloques (pero varias según modelo)
* Lenguaje estructurado. Bajo nivel y control de hardware.
* Diagrama de estado
== Desventajas ==
Sin embargo, y como sucede en todos los casos, los PLCs, presentan ciertas desventajas como es la necesidad de contar con técnicos calificados específicamente para ocuparse de su buen funcionamiento; incompatibilidad entre marcas y altos precios de licencias.
* Son caros (ciento a miles de dolares)
* Los periféricos deben ser de la marca y son caros
* Requieren licencias para el software de programación
* No hay librerías disponibles
* Pobre comunidad de usuarios
== Marcas comerciales ==
* [https://w5.siemens.com/cms/mam/industry/automatizacion/simatic-sistemas-de-automatizacion-industrial/plc/pages/plc-siemens-simatic.aspx Siemens]
* [https://www.schneider-electric.com.pe/es/product-category/3900-pac%2C-plc-y-otros-controladores/ Schneider]
* [https://ab.rockwellautomation.com/lang-selection.html Allen Bradley]
* [https://www.abb.es ABB]
* [http://www.omron.com Omron]
* [http://www.fujielectric.com Fujielectric]
* [https://spanish.alibaba.com/g/chinese-plc.html PLC chinos]
== Vea también ==
* [[ArdBox]]
* [[PIC]]
* [[AVR]]
* [[FPGA]]
* [[SCADA]]
* [[OPC]]
== Referencias ==
* [https://youtu.be/3bwDiIV09yE PLC vs Arduino]
* [https://store.arduino.cc/usa/plc-arduino-ardbox-plc-20-i-os-relay-hf PLC Arduino ArdBox 20] - Industrial Shields
* [https://industruino.com/ Industrino]
* [https://www.controllino.biz/ Controllino]
[[Category:Placas]]
3ywe7o6r3hrs9eeu3aodvulebpthy3h
PROGMEM
0
199
5220
5219
2020-02-02T05:19:06Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Almacena datos en la memoria [[flash]] (memoria de programa) en lugar de la [[SRAM]].
La palabra clave '''PROGMEM''' es un modificador de variable, debe ser usada solo con los tipos de datos definidos en la biblioteca <pgmspace.h>. Se le dice al compilador poner esta información en la memoria [[flash]], en lugar de en la [[SRAM]], donde normalmente iría.
== Sintaxis ==
PROGMEM es parte de la biblioteca <pgmspace.h> que está disponible solo en la arquitectura AVR. Por lo que primero necesita incluir la biblioteca en la parte superior de su boceto, como esto:
<pre>
#include <avr/pgmspace.h>
const tipo variable[] PROGMEM = {}; //usar este formato
const PROGMEM tipo variable[] = {}; //o este formato
const tipo PROGMEM variable[] = {}; //NO usar este formato
</pre>
== Parámetros ==
;variable: el nombre de nuesta dato o matriz
;tipo: cualquier tipo de variable [[byte]], [[int]], [[long]], [[float]], etc
== Advertencias ==
* Tenga en cuenta que debido a que '''PROGMEM''' es un modificador de la variable, no hay ninguna regla dura y rápida acerca de donde debe ir, por lo que el compilador de Arduino acepta todas las definiciones de más abajo, que también son sinónimos. Sin embargo los experimentos han indicado que, en varias versiones de Arduino (que tienen que ver con la versión de GCC), '''PROGMEM''' puede trabajar en un lugar y no en otro.
* Mientras que PROGMEM podría ser utilizado con una sola variable, realmente sólo vale la pena el trabajo si se tiene un bloque más grande de datos que necesitan ser almacenados, que suele ser más fácil en una matriz, (u otra estructura de datos C más allá de nuestra presente discusión) .
El uso de PROGMEM es un procedimiento de dos pasos. Después de obtener los datos en la memoria Flash, que requiere métodos especiales (funciones), también definidas en la biblioteca pgmspace.h leemos de nuevo los datos de la memoria de programa en SRAM, por lo que podemos hacer algo útil con él.
== Ejemplo 1 ==
El ejemplo "tabla de cadenas" siguiente ha sido probado para trabajar con Arduino 13. Las versiones anteriores del IDE pueden funcionar mejor si se incluye PROGMEM después del el nombre de la variable.
<syntaxhighlight lang="c++">
#include <avr/pgmspace.h>
const PROGMEM uint16_t charSet[] = {65000, 32796, 16843, 10, 11234};
const char signMessage[] PROGMEM = {"YO SOY PREDATOR, COMBATIENTE INVISIBLE. CREADO POR EL DEPARTAMENTO DE LOS ESTADOS UNIDOS"};
unsigned int displayInt;
char myChar;
void setup() {
Serial.begin(115200);
while (!Serial);
//lee de nuevo un int de 2 bytes
for (int k=0; k<5; k++) {
displayInt = pgm_read_word_near(charSet + k);
Serial.println(displayInt);
}
Serial.println();
//lee de nuevo un caracter
int len = strlen_P(signMessage);
for (int k=0; k<len; k++){
myChar = pgm_read_byte_near(signMessage + k);
Serial.print(myChar);
}
Serial.println();
}
void loop(){
//Nada.
}
</syntaxhighlight>
== Vea también ==
* [[variable publica]]
* [[variable local]]
* [[matriz]]
* [[define|#define]]
* [[static]]
* [[volatile]]
* [[const]]
* [[Palabras reservadas]]
== Referencias ==
[[Category:Variables]]
pg4a9qet11qx6cd4otq3emajt8ahktm
Palabras reservadas
0
392
5181
5180
2020-02-02T03:34:56Z
Kike GL
2
wikitext
text/x-wiki
Estas palabras '''reservadas''' son las que cambian de color en el IDE.
* [[HIGH / LOW]]
* [[true / false]]
* [[INPUT / OUTPUT / INPUT_PULLUP]]
* [[CHANGE / FALLING / RISING]]
* [[DEC / BIN / HEX / OCT]]
* [[PI]]
* [[LED_BUILTIN]]
* [[static]]
* [[const]]
* [[volatile]]
* [[void]]
* [[null]]
* [[LSBFIRST / MSNFIRST|MSNFIRST]]
* [[LSBFIRST / MSNFIRST|LSBFIRST]]
* [[include|#include]]
* [[define|#define]]
* [[Comentarios]] - <nowiki>(// y /* */)</nowiki>
== Vea también ==
<categorytree mode=all>Palabras reservadas</categorytree>
== Referencias externas ==
* [https://playground.arduino.cc/ArduinoNotebookTraduccion/Appendix7/ Palabras reservadas]
[[Category:Palabras reservadas]]
rx1oz9qxnfphgcylw70i9th5fylutag
Physical pixel
0
236
3746
1006
2019-05-06T22:12:49Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Comunicaciones</categorytree>
== Referencias ==
[[Category:Comunicaciones]]
d8atefw72kf74bl7caf89mtyl0c79fx
Ping
0
256
3740
1032
2019-05-06T22:10:05Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Sensores</categorytree>
== Referencias ==
[[Category:Sensores]]
phrz68vyt00mk72xrwh41yn8g07pld8
Processing
0
391
4794
4793
2019-07-18T16:58:27Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
El lenguaje de programación usado por Arduino está basado en Processing es un lenguaje de programación y entorno de desarrollo integrado de código abierto basado en Java, de fácil uso y que sirve como medio para la enseñanza y producción de proyectos multimedia.
== AVR-LibC ==
Para programar un Arduino, el lenguaje estándar es C++, aunque es posible programarlo en otros lenguajes. No es un C++ puro sino que es una adaptación que proveniente de AVR-LibC que provee de una librería de C de alta calidad para usar con GCC en los microcontroladores (uC) AVR de ATmel y muchas funciones específicas para los MCU AVR de ATmel.
== Vea también ==
<categorytree mode=all>Arduino</categorytree>
== Referencias ==
[[Category:Arduino]]
51k16kqfb65ogtapb2pc8ov30g2vcpz
Programacion avanzada
0
221
4968
4965
2019-09-26T16:09:23Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
La mayoría de los puertos de los uC son multipropósito, es decir, en función de su configuración se comportan de una forma u otra. El ATmega 328p como cualquier otro uC tiene registros para cada puerto donde define si sera usado como entrada o salida. ATmega 328p tiene 3 bancos o grupos de puertos: B (D8~D13), C (A0~A5) y D (D0~D7), es decir a B y C le faltan puertos debido a que no se dispone de pines suficientes al ser ATmega 328p un DIP-28 (en comparación del tradicional DIP-40 de la mayoría de uC).
{| class="wikitable"
!Banco!!2<sup>7</sup>!!2<sup>6</sup>!!2<sup>5</sup>!!2<sup>4</sup>!!2<sup>3</sup>!!2<sup>2</sup>!!2<sup>1</sup>!!2<sup>0</sup>
|-
|B||-||-||D13||D12||D11||D10||D9||D8
|-
|C||-||-||A5||A4||A3||A2||A1||A0
|-
|D||D7||D6||D5||D4||D3||D2||D1||D0
|-
!Valor!!128!!64!!32!!16!!8!!4!!2!!1
|}
ATmega 328p tiene 3 registro de 8 bits con los que administra estos 3 bancos:
* DDRx, determina si el banco '''x''' sera entrada (0) o salida (1).
* PORTx, determina si el banco '''x''' estara en nivel HIGH o LOW. También define Pull-up si es fuera una entrada.
* PINx, permite leer estado del banco '''x''' (solo lectura).
== Registros ==
Antes de meterme de lleno a explicarte los registros, quiero que primero veamos para que podría servir este esfuerzo.
Ventajas de usar registros:
* Cada instrucción máquina necesita un ciclo de reloj a 16 MHz. Las funciones [[digitalRead()]] y [[digitalWrite()]] se componen cada una de ellas de varias instrucciones máquina, lo que puede influir negativamente en aplicaciones muy dependientes del tiempo. El Registro '''PORTx''' puede hacer el mismo trabajo en muchos menos ciclos de reloj.
* Si necesitas cambiar de estado muchos pines en lugar de hacer un loop [[for]] que tomara mucho tiempo puedes echar mano directamente al registro y establecer varios pines de una sola vez.
* Si estas al limite de memoria [[flash]], puedes usar este truco para hacer que tu código use menos bytes de programación.
Desventajas de usar registros:
* El código no es fácil de entender para novatos.
* Es mucho mas fácil que cometas errores de difícil depuración. Por ejemplo con DDRD = 1, pone todos los pines del banco B (D0~D7) como salida, incluso el pin D0 (Rx) lo que causar que el puerto serial deje de funcionar.
{{Nota|En librerías es muy recomendable usar la manipulación directa de registros, así se hacen mucho mas rápidas.}}
== Digitales ==
Bien ahora que ya sabes para que nos meteremos en como manejar estos registros. En principio tenemos dos métodos: masivo es decir todos los puertos de un banco a la vez o puntual es decir un puerto de un banco en particular.
=== Masivo ===
Ya sabemos que ATmega 326P maneja 3 bancos (B, C y D) y que cada uno agrupa a un numero de puertos. Por otro lado tenemos 3 registros (DDRx, PORTx y PINx) que podemos manejar.
<pre>
DDRB = 255; //D8~D13 como salidas.
DDRD = B11111111; //D0~D7 como salidas.
DDRD = B00000000; //D0~D7 como entradas.
DDRB = B00000111; //D8~D10 como salida D11~D13 como entradas.
PORTD = B11111111; //D0~D7 en HIGH.
PORTD = 0; //D0~D7 en LOW.
PORTB = B00000101; //D8+D10 en HIGH, D8, D11~D13 en LOW.
byte variable = PIND; //Guarda en una variable los estados de D0~D7 como un byte.
</pre>
Se debe tener cuidado cuando se usa el PORTD y el puerto serie D0 (Rx) y D1 (Tx) son los usados por la UART y si se pone estos puertos como entradas o salidas, la UART será incapaz de leer o escribir datos en estos puertos. Este es un ejemplo de cuidado que se debe tener al usar esta programación en lugar de la capa de programación que nos ofrece Arduino.
Mediante los registros también podemos controlar las resistencias internas de pull-up que se usan básicamente para no dejar los pines al aire ya que esto genera ruido eléctrico. Se puede resolver este problema de dos maneras: poner una resistencia externa de 10K a Vcc (+5V) o usar los Pull-up internos del uC que producen el mismo efecto y hacen mas simple el circuitos.
Para habilitar las resistencias pull-up tenemos primero que configurar como entrada (0) el puerto mediante registro DDRx y luego escribir un 1 en el registro PORTx.
<pre>
DDRD = 0; //Configura todos los puertos del banco PORTD (D0~D7) como entradas.
PORTD = B00001111; //Habilitar las Pull-ups de los puertos D0~D3.
</pre>
Es casi tan fácil como usar las funciones [[digitalRead()]] y [[digitalWrite()]] de Arduino, pero con acceso directo al puerto se puede ahorrar espacio en la memoria flash porque cada operación de leer el estado de un solo puerto ocupa 40 bytes de instrucciones y también puede ganar mucha velocidad, porque las funciones Arduino puede tomar más de 40 ciclos de reloj para leer o escribir un solo bit en un puerto.
=== Puntual ===
No es normal que se necesite definir, leer o escribir en un banco completo siempre, por ejemplo, si queremos encender un LED tendremos que actual sobre un solo puerto y no sobre todo el banco. Para eso podemos usar la macro '''Pxn''' donde '''x''' sera el puerto B, C o D y '''n''' sera el bit que estará entre 0~7 para definir el pin en particular. Ver exponencial de tabla arriba.
<pre>
DDRD = 0<<PD2; //Configura el bit 2 (pin D2) como enteada.
DDRB = 1<<PB2; //Configura el bit 2 (pin D10) como salida.
DDRB = bit(5); //Configura el bit 5 (pin D13) como salida.
PORTD = 1<<PD5; //Pone bit 5 (pin D5) en HIGH.
PORTB = 0<<PD2; //Pone bit 2 (pin D10) en LOW.
PORTB = PORTB | bit(2); //Pone bit 2 (pin D10) en HIGH.
PORTD = PORTD ^ 32; //Conmuta bit 5 (D5).
PORTB = 1<<PB5; //Le pone al bit 5 (pin D13) el PULL_UP.
byte variable = (PIND & (1<<PD1)); //Lee bit 1 (pin D1) y almacena su valor en la variable.
</pre>
También podemos usar la macro '''Pxn''' varias veces en una misma instrucción, por ejemplo, en este código, se ejecutará algo de código sólo si los puertos D10 y D11 están en HIGH al mismo tiempo.
<pre>
DDRB = B00001100; // Los pines D10 y D11 son salidas y el resto (D8+D9+D12+D13) entradas.
if (PINB & ((1<<PB2) | (1<<PB3))) {
//Algún código que se ejecutará solo si los dos pines de salida (D10+D11) se encuentran en HIGH.
}
</pre>
La manipulación directa de los puertos puede ser acompañada de las máscaras de bits, los operadores lógicos ([[not]], [[and]], [[or]] y [[xor]]) y operaciones de desplazamiento a la derecha e izquierda.
El siguiente ejemplo lee alternativamente 100 veces el pin D9 con [[digitalRead()]] y mediante el registro '''PINB''' y calcula el tiempo en microsegundos de ambas operaciones. Te sorprenden los resultados ?
<syntaxhighlight lang="c++">
unsigned long t,t1;
bool x = true;
int y;
void setup(){
Serial.begin(115200);
pinMode(9, INPUT_PULLUP);
}
void loop(){
t = micros();
if (x){
for (byte n=0; n<100; n++){
y = digitalRead(9);
}
}else{
for (byte n=0; n<100; n++){
y = PINB & (1 << PB1);
}
}
t1 = micros() - t;
if (x){
Serial.print("DigitalRead() = ");
}else{
Serial.print("PINx = ");
}
x = !x;
Serial.println(t1);
}
</syntaxhighlight>
== Analogicos ==
La forma de manejar con registros las entradas analógicas correspondientes al puerto C con POR y PIN es para usar esos pines como I/O digitales, puesto que los pines de los uC son multipropósito como se ha dicho anteriormente.
En las entradas analógicas entran en juego los conversores Analógico Digital (ADC) y en las salidas analógicas entra el [[analogWrite()|PWM]] que usa uno de los temporizadores del uC para hacer la forma de onda [[analogWrite()|PWM]].
=== ADC ===
Un uC solo entiende señales digitales (0+1), por lo que para leer señales analógicas necesitamos un conversos análogo a digital (ADC). El ATmega 329P tiene incluido un conversor analógico a digital (ADC) de 6 canales (por multiplexion) y 10 bits (1024 pasos), por lo que devuelva enteros entre 0~1023.
Esto significa que a pesar de que ATmega 328P tiene disponibles 6 pines analogicos (A0~A5) solo puede leer un pin analogico a la vez (por la multilexion), de modo de si requiere lecturas de alta velocidad se podría necesitar el uso de ADC externos. El datasheet de ATmega advierte de hacer lecturas rápidas entre pines analógicos (mas de 200 KHz) puede causar ruido eléctrico, por lo que se recomienda incluir retardos de 1 milisegundo entre lecturas.
También es posible alterar la tensión máxima (siempre por debajo de Vcc) que usa el ADC. Es Aref, que es la tensión contra la que todas las entradas analógicas hacen las conversiones. Reducir Aref tiene sentido para mejorar la resolución del ADC. Con Aref = 5V la resolución es de 4,88 mV (5/1023) por paso. Si tienes un sensor de 3V3 mejor pon Vref = 3V3 y obtendrás una resolución de 3.22 mV (3.3/1023) por paso.
El ADC interno también se puede usar en un modo de 8 bits (), donde sólo se usan los 8 bits más significativos de la resolución de 10 bits completa, esto podría ser útil cuando se trabaja en ambientes ruidosos y se ahorra tiempo de uC. El ADC también puede configurarse para que lleve a cabo una conversión y detenerse o puede ser configurado para funcionar en un modo de funcionamiento libre, la primera opción es la mejor opción cuando queremos leer diferentes pines, y el segundo es mejor cuando sólo tenemos que leer un pin y esto puede ahorrar algo de tiempo entre las conversiones.
=== PWM ===
Las salidas Pulse Width Modulation ([[analogWrite()|PWM]]) permiten simular salidas analógicas con ciertos pines digitales (D3, D5, D6, D9, D10, D11 para Arduino [[UNO]]). [[analogWrite()|PWM]] es una técnica para modificar el ancho de pulsos (duty cycle) de una señal. Lo que modificamos no es la frecuencia que siempre sera 490 Hz (D3, D9, D10 y D11) o 980 Hz (D5 y D6), sino que cambiaremos la proporción de la parte positiva y negativa de cada periodo. Sus usos son:
* Generar tensiones analógicas entre 0~100% de Vcc
* Generar señales de audio
* Controlar velocidad de motores
* Varias intensidad de un LED
En la familia de uC AVR, el [[analogWrite()|PWM]] se controla por hardware y ATmega 328p cuenta con 3 timers. Timer 0 (D5 + D6) y timer 2 (D3 + D11) dan una resolución de 8 bit (256 pasos) mientras que el timer 1 (D9 + D10) ofrece una resolución de 16 bits (65536 pasos). Todo lo que necesita hacer es inicializar e iniciar el temporizador y establecer el ciclo de trabajo. Estos temporizadores generan interrupciones cuando alcanzan el overflow o cuando alcanzan el registro de comparación. Los registros de control del timer/counter n (donde n 0~2) son TCCRnA y TCCRnB y tienen los principales controles de los temporizadores.
== Comentarios ==
{| class="wikitable col2cen"
|+ATmega 328 a 16 MHz
|-
! Comando !! ciclos CPU
|-
| [[digitalRead()]] sin PWM || 58
|-
| [[digitalRead()]] con PWM || 72
|-
| [[digitalWrite()]] sin PWM || 63
|-
| [[digitalWrite()]] con PWM || 77
|-
| [[analogRead()]] || 1775
|-
| [[analogWrite()]] || 129
|}
{| class="wikitable col3cen"
|+Operaciones avanzadas
|-
! Comando !! Descripcion !! ciclos CPU
|-
| PINx; || Leer 8 pines || 1
|-
| n = PINx; || Leer y almacenar en variable RAM 8 pines || 3
|-
| PORTx = B000010000; || Escribir 8 pines || 1
|-
| PORTx = n; || Escribir 8 pines desde variable en RAM || 3
|}
== Ejemplo ==
Se requiere definir el pin como salida.
{|class="wikitable col3cen"
!Pin!!Definición!!Valor
|-
|D0||PIND = bit(0);||1
|-
|D1||PIND = bit(1);||2
|-
|D2||PIND = bit(2);||4
|-
|D3||PIND = bit(3);||8
|-
|D4||PIND = bit(4);||16
|-
|D5||PIND = bit(5);||32
|-
|D6||PIND = bit(6);||64
|-
|D7||PIND = bit(7);||128
|-
|D8||PINB = bit(0);||1
|-
|D9||PINB = bit(1);||2
|-
|D10||PINB = bit(2);||4
|-
|D11||PINB = bit(3);||8
|-
|D12||PINB = bit(4);||16
|-
|D13||PINB = bit(5);||32
|-
|A0||PINC = bit(0);||1
|-
|A1||PINC = bit(1);||2
|-
|A2||PINC = bit(2);||4
|-
|A3||PINC = bit(3);||8
|-
|A4||PINC = bit(4);||16
|-
|A5||PINC = bit(5);||32
|}
<syntaxhighlight lang="c++">
void setup(){
DDRB = bit(5); //Define el bit 5 (pin digital 13) como salida.
}
void loop(){
PORTB = PORTB ^ bit(5); //Invertido estado del bit 5 (pin digital 13), no altera el resto.
delay(500);
}
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup(){
DDRB = B11111111; //Lo mismo que DDRB = 255;
}
void loop(){
PORTB = 255; //Prende todos los LED D8~D13
delay(500);
PORTB = 0; //Apaga todos los LED D8~D13
delay(500);
}
</syntaxhighlight>
== Ejemplo 3 ==
Parpadea el LED a bordo.
<syntaxhighlight lang="c++">
void setup() {
DDRB = DDRB | 32; //Configura el pin digital 13 como OUTPUT, no altera el resto. 32=B00100000;
}
void loop() {
PORTB = PORTB ^ 32; //Invertido estado del bit 5 (pin digital 13), no altera el resto.
delay(500);
}
</syntaxhighlight>
También se puede usar: PORTB = PORTB <nowiki>^</nowiki> bit(5):
== Ejemplo 4 ==
Se pueden crear definiciones especiales como estas:
<syntaxhighlight lang="c++">
#define CLR(puerto,bit) (puerto&=(~(1<<bit))) //CLR(PORTB, 0);
#define SET(puerto,bit) (puerto|=(1<<bit)) //SET(PORTB, 0);
#define _BV(bit) (1<<(bit)) //PORTB |= _BV(0); o PORTB &= ~(_BV(0));
#define SBI(puerto,bit) (puerto)|=(1<<(bit)) //SBI(PINB, 0);
#define RVT(puerto,bit) (puerto=puerto^bit(bit)) //RVT(PORTD, 5);
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones pines</categorytree>
== Referencias externas ==
* [http://arduino.cc/en/Tutorial/PWM Arduino oficial]
* [https://www.arduino.cc/en/Reference/PortManipulation PORT manipulation] - Arduino
* [http://www.luisllamas.es/2014/09/entradas-analogicas-en-arduino/ Entradas analogicas] - Luis Llamas
* [http://panamahitek.com/registro-port-puerto/ El registro PORT] - José Villalaz
[[Category:Funciones pines]]
mzegsg4znd3i4se6ccft0z4hv231sum
Programacion avanzada MEGA
0
484
4850
4849
2019-08-08T00:17:14Z
Kike GL
2
wikitext
text/x-wiki
La mayoría de los puertos de los uC son multipropósito, es decir, en función de su configuración se comportan de una forma u otra. El ATmega 328p como cualquier otro uC tiene registros para cada puerto donde define si sera usado como entrada o salida. Arduio [[MEGA]] tiene 6 bancos o grupos de puertos: A (22~29), B (10~13+50~53), C (30~37), D (18~21+38), E (4+39~41), H (6~9+16+17) es decir a D, E y H le faltan puertos debido a que no se dispone de pines suficientes en el [[MEGA]].
{| class="wikitable"
!Banco!!2<sup>7</sup>!!2<sup>6</sup>!!2<sup>5</sup>!!2<sup>4</sup>!!2<sup>3</sup>!!2<sup>2</sup>!!2<sup>1</sup>!!2<sup>0</sup>
|-
|A||29||28||27||26||25||24||23||22
|-
|B||13||12||11||10||50||51||52||53
|-
|C||30||31||32||33||34||35||36||37
|-
|D||-||-||-||38||18||19||20||21
|-
|E||-||-||-||-||4||39||40||41
|-
|H||-||-||9||8||7||6||16||17
|-
!Valor!!128!!64!!32!!16!!8!!4!!2!!1
|}
ATmega 2560 tiene 6 registro de 8 bits con los que administra estos 6 bancos:
* DDRx, determina si el banco '''x''' sera entrada (0) o salida (1).
* PORTx, determina si el banco '''x''' estará en nivel HIGH o LOW. También define Pull-up si es fuera una entrada.
* PINx, permite leer estado del banco '''x''' (solo lectura).
== Vea también ==
* [[Programacion avanzada]] - UNO
== Referencias externas ==
[[Category:Funciones pines]]
98wngxl301f00cdejdzn5aall379xg5
Página principal
0
1
5262
5261
2020-02-05T01:13:31Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
'''ArduWiki''' es una iniciativa que se propuso en el foro de Arduino en español, para intentar tener una documentación aceptablemente buena en nuestro idioma, ya que la original '''Guía de Referencia de Arduino''' es un verdadero desastre y no encontramos la forma de colaborar allí. Es nuestra intención que esto sea temporal y que en algún momento podamos volcar todo este conocimiento a la página oficial. Este wiki es una contribución de algunos [[Entusiastas]].
{{Nota|Si te interesa colaborar con este proyecto y eres por lo menos usuario '''Full Member''' solo tienes que crearte una cuenta en este Wiki (arriba derecha) y luego contactar con '''Kike_GL''' en el foro de Arduino en español, gracias.}}
Foro Arduino en Español [https://forum.arduino.cc/index.php?topic=542577.0 aquí]
== Que es Arduino ? ==
Arduino es una plataforma de hardware libre, basada en una placa con un uC (MCU) y un entorno de desarrollo ([[IDE]]), diseñada para facilitar el uso de la electrónica en proyectos multidisciplinarios. Usar Arduino es fácil pero requiere algunos conocimientos básicos de electrónica, componentes electrónicos, cierta habilidad para el ensamblado y programación.
{{Nota| Es muy similar a lo que es un [[PLC]] comercial.}}
== Placas ==
Explore toda la gama de productos oficiales de Arduino, incluidos tarjetas, módulos (un factor de forma más pequeño que la placas clásica), escudos o shields (elementos que se pueden enchufar en una placa para darle características adicionales) y kits.
{|class="wikitable"
!Nombre!!uC!!Operacion!!Entrada!!Velocidad!!Analogicas!!Digitales!!PWM!!EEPROM!!SRAM!!flash!!USB!!UART
|-
|[[UNO]]||ATmega328P||5 V||7~12 V||16 MHz||6||14||6||1||2||32||Regular||1
|-
|[[MINI]]||ATmega328P||5 V||7~9 V||16 MHz||8||14||6||1||2||32||-||-
|-
|[[MICRO]]||ATmega32U4||5 V||7~12 V||16 MHz||12||20||7||1||2.5||32||Micro||1
|-
|[[NANO]]||ATmega168<br>ATmega328P||5 V||7~9 V||16 MHz||8||14||6||0.512<br>1||1<br>2||16<br>32||Mini||1
|-
|[[MEGA]]||ATmega2560||5 V||7~12 V||16 MHz||16||54||15||4||8||256||Regular||4
|-
|[[PRO]]||ATmega168<br>ATmega328P||3.3 V<br>5 V||3.35~12 V<br>5~12 V||8 MHz<br>16 MHz||6||14||6||0.512<br>1||1<br>2||16<br>32||-||1
|-
|[[DUE]]||ATSAM3X8E||3.3 V||7~12 V||84 MHz||12||54||12||-||96||512||2 Micro||4
|-
|[[101]]||Intel® Curie||3.3 V||7~12V||32 MHz||6||14||4||-||24||196||Regular||-
|-
|Gemma||ATtiny85||3.3 V||4~16 V||8 MHz||1||3||2||0.5||0.5||8||Micro||0
|-
|LilyPad||ATmega168V<br>ATmega328P||2.7~5.5 V||2.7~5.5 V||8 MHz||6||14||6||0.512||1||16||-||-
|-
|LilyPad SimpleSnap||ATmega328P||2.7~5.5 V||2.7~5.5 V||8 MHz||4||9||4||1||2||32||-||-
|-
|LilyPad USB||ATmega32U4||3.3 V||3.8~5 V||8 MHz||4||9||4||1||2.5||32||Micro||-
|-
|[[MKR1000]]||SAMD21 Cortex-M0+||3.3 V||5 V||48 MHz||7||8||4||-||32||256||Micro||1
|-
|Pro Mini||ATmega328P||3.3 V<br>5V||3.35~12 V<br>5-12 V||8 MHz<br>16 MHz||6||14||6||1||2||32||-||1
|-
|[[ZERO]]||ATSAMD21G18||3.3 V||7~12 V||48 MHz||6||14||10||-||32||256||2 Micro||2
|-
|[[ESPLORA]]||ATmega32U4||5 V||7~12 V||16 MHz||-||-||-||1||2.5||32||Micro||-
|-
|Ethernet||ATmega328P||5 V||7~12 V||16 MHz||6||14||4||1||2||32||Regular||-
|-
|[[LEONARDO]]||ATmega32U4||5 V||7~12 V||16 MHz||12||20||7||1||2.5||32||Micro||1
|-
|Mega ADK||ATmega2560||5 V||7~12 V||16 MHz||16||54||15||4||8||256||Regular||4
|-
|[[Yùn]]||ATmega32U4<br>AR9331 Linux||5 V||-||16 MHz<br>400 MHz||12||20||7||1||2.5<br>16MB||32 MB<br>64 MB||Micro||1
|-
|[[MKR ZERO]]||SAMD21<br>Cortex-M0+32bit low power<br>ARM MCU||3.3 V||-||48 MHz||7 (ADC 8/10/12 bit)<br>1 (DAC 10 bit)||22||12||No||32 KB||256 KB||1||1
|}
=== Nivel básico ===
Comience con Arduino utilizando productos de nivel de entrada: fácil de usar y listo para impulsar sus primeros proyectos creativos. Estas placas y módulos son los mejores para comenzar a aprender y jugar con la electrónica y la codificación. StarterKit incluye un libro con 15 tutoriales que lo guiarán a través de los conceptos básicos hasta proyectos complejos.
* [[UNO]] + [[101]] + [[ESPLORA]] + [[MINI]] + [[MICRO]] + [[NANO]] + [[LEONARDO]] + [[DUO]]
=== Características mejoradas ===
Experimente la emoción de proyectos más complejos eligiendo una de las placas con funcionalidades avanzadas o actuaciones más rápidas.
* [[MEGA]] + [[ZERO]] + [[MKR ZERO]]
=== Internet de las Cosas ===
Haga dispositivos conectados fácilmente con uno de estos productos de IoT y abra su creatividad con las oportunidades de la red mundial.
* [[MKR1000]] + [[YUN]] + [[Ethernet]] + [[ESP8266]]
== Referencias de lenguaje ==
# Que es un [[boceto]] o sketch y como funciona ?
# Tipos de [[memoria]] en Arduino.
# Todo sobre el [[IDE]] de Arduino.
* [[Estructura]] los elementos del código de Arduino (C++).
* [[Variables]] tipos de datos, contantes y variables en Arduino.
* [[Funciones]] para controlar la placa Arduino y realizar cálculos.
{{Nota|Si les parece empecemos por aquí.}}
<categorytree mode=all>Referencias</categorytree>
== Guia de estilo Arduino ==
# Escribe en primera persona. Al dar instrucciones al lector debes hacerla en segunda persona.
# Se claro y conciso, evita el palabreo con frases que no agreguen información.
# Cada vez que te refieras a un comando de Arduino, escribelo tan cual se usa respetando mayusculas y minusculas y referencialo.
# Explique lo que cada ejemplo hace antes de empezar a codificar. Indicar si se pretende que usuario arme una parte fisica o circuito.
# En el código es primordial la '''legibilidad''' no la eficiencia.
# Ejemplos deben ser simples, por eso usa [[delay()]] y [[Serial.print()]] sin complejos.
# Siempre incluye [[setup()]] y [[loop()]], aunque estén vacíos.
# Pon comentario muy cortos.
== Ejemplos incluidos en el IDE ==
Los ejemplos incorporados son [[boceto]]s incluidos en el software Arduino [[IDE]]. Para abrirlos haga clic en el menú de la barra de herramientas: Archivo > Ejemplos. Estos sencillos [[boceto]]s demuestran el uso de todos los comandos básicos de Arduino.
En esta sección encontrara los mismos ejemplos traducidos y mejorados.
[[Ejemplos incluidos]]
<categorytree mode=all>Ejemplos</categorytree>
== Tips ==
Esta es una sección que pretende recopilar Tips de todas partes que sean útiles a los usuarios.
<categorytree mode=all>Tips</categorytree>
== Librerías ==
El software Arduino ([[IDE]]) se puede ampliar mediante el uso de librerías, al igual que la mayoría de las plataformas de programación, para proporcionar funcionalidad adicional a sus [[boceto]]s (sketches). A continuación listamos las librerías más importantes explicando su funcionamiento.
Además le mostraremos ejemplos de varias librerías que vienen instaladas con el IDE. Para abrirlas haga clic en el menú de la barra de herramientas: Archivo > Ejemplos.
Para ver la lista completa de librerías para Arduino, visite la página de Referencia de la librería.
[[Librerias]]
{{Nota|Esta sección la desarrollara Jopapa}}
<categorytree mode=all>Librerias</categorytree>
== Módulos ==
Existen básicamente dos tipos de módulos en Arduino:
;Los mal traducidos escudos (Shields): Son placas de circuitos modulares que se montan unas encima de otras para dar funcionalidad extra a un Arduino ya que respetan su factor de forma.
;El resto: que son los que no cumplen en factor de forma de Arduino y debes instalarlos usando cables.
== Electrónica ==
Arduino requiere conocimientos básicos de electrónica por eso incluimos aquí esta sección.
* [https://arduino.perut.org/e_05.htm Entradas] - Apuntes de Arduino
* [https://arduino.perut.org/e_05.htm Salidas] - Apuntes de Arduino
{{Nota|Por ahora basta con [http://arduino.perut.org/ Mis apuntes sobre Arduino] o [https://itp.nyu.edu ITP Physical Computing]}}
== Referencias externas ==
* [https://www.arduino.cc/ Pagina oficial de Arduino]
* [https://www.arduino.cc/reference/es/ Guia de Referencia de Arduino] - el desastre
* [https://forum.arduino.cc/index.php?board=32.0 Foro Arduino Español] - contactar [[Usuario:Kike_GL|Kike_GL]]
* [https://www.arduino.cc/en/Reference/Libraries Librerías]
* [https://www.arduino.cc/en/Reference/StyleGuide Guia de estilo]
* [https://campus.programarfacil.com/?menu-curso-arduino Campus Programas Facil] - Luis del Valle
* [https://aprendiendoarduino.wordpress.com Aprendiendo Arduino] - Enrique Crespo
* [https://manueldelgadocrespo.blogspot.com/ Arduino en español] - Manuel Delgado
* [https://www.luisllamas.es/referencia-lenguaje-arduino/ Referencias de Arduino] - Luis Llamas
* [https://miarduinounotieneunblog.blogspot.com/ Mi Arduino tiene un Blog] - Mariano del Campo
* [https://www.prometec.net/indice-tutoriales/ Tutoriales de Arduino] - Prometec
* [https://naylampmechatronics.com/ Tienda Arduino Trujillo] - Naylamp Mecatronics SAC
* [http://elcajondeardu.blogspot.com/ El cajon de Arduino] - ECDA 2.0
* [https://www.scoop.it/topic/tecno4 Tecno4] - Gumersindo Fernandez
* [https://www.scoop.it/topic/tecno4/p/4026233951/2014/08/13/tutoriales-de-arduino-de-el-profe-garcia Tutorial de Arduino] - El profe Garcia
* [https://dronprofesional.com/blog/como-aprender-arduino-desde-cero/ Como aprender Arduino desde cero] - Dron Profesional
* [https://www.rinconingenieril.es/ Rincon Ingenieril] - Rincon Ingenieril
* [http://www.kio4.com/arduino/index.htm Kio4] - Kio4
* [http://proyectosconarduino.com Proyecto Arduino]
* [http://arduino.perut.org Apuntes de Arduino] - Kike_GL
[[Category:Arduino]]
t1l0sln33qcoj83kvwt101i4n1q5bdm
RS-232
0
388
4823
4433
2019-07-19T00:25:05Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Recommended Standard 232, también conocido como EIA/TIA RS-232C, es una interfaz que designa una norma para el intercambio de datos binarios serie entre un DTE (Data Terminal Equipment), como por ejemplo una computadora, y un DCE (Data Communication Equipment), por ejemplo un módem. Existen otros casos en los que también se usa la interfaz RS-232.
En particular, existen ocasiones en que interesa conectar otro tipo de equipamientos, como pueden ser computadoras. Evidentemente, en el caso de interconexión entre los mismos, se requerirá la conexión de un DTE con otro DTE. Para ello se usa una conexión entre los dos DTE sin usar módem, por ello se llama módem nulo (null modem).
El RS-232 consiste en un conector tipo DB-25 (de 25 pines), aunque es normal encontrar la versión DB-9 (de 9 pines) más barato e incluso más extendido para cierto tipo de periféricos (como el ratón serie de la PC).
== Historia ==
La primera especificación de esta interfaz se publicó en 1962 y desde entonces se ha hido revisado frecuentemente. Una de las revisiones más extendidas fue la EIA-232-C. El primer nombre que recibió esta interfaz fue RS-232, nombre que aún hoy se usa ampliamente, a pesar de que dicho estándar lo adoptaría la organización de estadarización norteamericana EIA (Electronic Industries Alliance, o hasta 1997 Electronic Industries Association) cambiando su nombre al actual EIA-232.1
Posteriormente la ITU-T desarrolló las correspondientes recomendaciones basadas en la interfaz EIA-232. La recomendación V.24 especifica los aspectos funcionales y operacionales, es decir, se define que circuitos o señales tienen que implementarse en la interfaz y la función de cada uno de ellos. Los aspectos eléctricos de la interfaz están definidos en la recomendación V.28.1
== Pines ==
{| class="wikitable"
|-
! Simbolo !! Señal !! DB-25 !! DB-9
|-
| Tx || Transmitted Data || 2 || 3
|-
| Rx || Receiver Data || 3 || 2
|-
| DTR || Data Terminal Ready || 20 || 4
|-
| DSR || Data Set Ready || 6 || 6
|-
| RTS || Request To Send || 4 || 7
|-
| CTS || Clear To Send || 5 || 8
|-
| DCD || Carrier Detect || 8 || 1
|-
| RI || Ring Indicator|| 22 || 9
|-
| GND || Tierra || 7 || 5
|}
== Caracteristicas ==
* Distancia maxima: 20 m
* Velocidad maxima: 20 kbps
* Comunicacion: sincrona o asincrona
* Tipo canal: simple o duplex
* Tension maxima: 25V
* Las señales se considerarán en el estado de MARCA, (nivel lógico “1”), cuando la tensión sea más negativa que -3 V con respecto a la línea GND. Las señales se considerarán en el estado de ESPACIO, (nivel lógico “0”), cuando la tensión sea más positiva que +3 V con respecto a GND. La gama de tensiones entre -3 V y +3 V se define como la región de transición, donde la condición de señal no está definida.
Si uno de los dispositivos conectados mediante una interfaz RS-232 procesa los datos a una velocidad menor de la que los recibe, deben de conectarse las líneas handshaking (RTS + CTS) que permiten realizar un control de flujo tal que al dispositivo más lento le de tiempo de procesar la información.
== Circuitos ==
La UART (Universal Asynchronous Receiver Transmitter) es el dispositivo que controla los puestos serie
{{Nota|Las señales externas pueden ser de variada índole. Ejemplos de estándares para señalización por voltaje son RS-232, RS-422 y RS-485 de la EIA. Históricamente se usó la presencia o ausencia de corriente en circuitos telegráficos.}}
== MAX232 ==
Generalmente, cuando se requiere conectar un uC (con señales típicamente entre 3,3 y 5 V) con un puerto RS-232 estándar, se usa un driver de línea, típicamente un MAX232 o compatible, el cual mediante dobladores de tensión positivos y negativos, permite obtener la señal bipolar (típicamente alrededor de +/- 6V) requerida por el estándar.
== Vea también ==
* [[RS-485]]
* [[PLC]]
* [[Wire]]
== Referencias ==
[[Category:Ejemplos]]
hxg2r5ciudvg78t452bszjkplyad5ex
RS-485
0
389
4661
2680
2019-07-06T02:35:27Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
RS-485 o también conocido como EIA-485, que lleva el nombre del comité que lo convirtió en estándar en 1983. Es un estándar de comunicaciones en bus de la capa física del Modelo OSI.
== Historia ==
Está definido como un sistema de bus diferencial multipunto, es ideal para transmitir a altas velocidades sobre largas distancias (10 Mbit/s hasta 12 metros y 100 kbit/s en 1200 metros) y a través de canales ruidosos, ya que el par trenzado reduce los ruidos que se inducen en la línea de transmisión. El medio físico de transmisión es un par trenzado (aunque existe una topología muy poco común de dos pares trenzados) que admite 32, 128 o 256 estaciones en 1 solo par, con una longitud máxima de 1200 metros operando entre 300 y 19 200 bit/s y la comunicación half-duplex (semiduplex) dependiendo del consumo de cada driver. La transmisión diferencial permite alcanzar mayor distancia con una notable inmunidad al ruido, siempre que el bus de comunicación conserve las características de bus balanceado dando la posibilidad de una configuración multipunto.
Desde 2003 está siendo administrado por la Telecommunications Industry Association (TIA) y titulado como TIA-485-A.222.
== Caracteristicas ==
* Interfaz diferencial
* Conexión multipunto
* Alimentación única de +5V
* Hasta 32 estaciones (ya existen interfaces que permiten conectar 256 estaciones)
* Velocidad máxima de 10 Mbit/s (a 12 metros)
* Longitud máxima de alcance de 1200 metros (a 100 kbit/s)
* Rango de bus de -7V a +12V
== Aplicaciones ==
* Se usa con frecuencia en las UARTs para comunicaciones de datos de poca velocidad en las cabinas de los aviones. Por ejemplo, algunas unidades de control del pasajero lo usan, equipos de monitoreo de sistemas fotovoltaicos. Requiere el cableado mínimo, y puede compartir el cableado entre varios asientos. Por lo tanto reduce el peso del sistema.
* Se usa en sistemas grandes de iluminación, como los conciertos de música y las producciones de teatro, se usa software especial para controlar remotamente el equipo de iluminación y los diferentes aparatos conectados al bus.
* En la automatización de los edificios pues el cableado simple del bus y la longitud de cable es larga por lo que son ideales para ensamblar los dispositivos que se encuentran alejados.
* En plantas industriales de producción automatizadas para el manejo de información digital y analógica entre los distintos equipos de la planta.
== Vea también ==
* [[RS-232]]
== Referencias ==
[[Category:Librerias]]
3okm4yj3aeeft11khkfu1y3fuw08fdb
RTC
0
399
5150
5144
2020-01-23T22:37:33Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
La librería [https://github.com/adafruit/RTClib RTClib.h] de Adafruit que permite trabajar con un reloj por software (RTC_Millis) y algunos relojes físicos como RTC_DS1307, RTC_DS3231 y PCF8523.
== Placas aplicables ==
Todas.
== Sintaxis ==
<pre>
//#include <Wire.h> //Solo si usas reloj fisico
#include <RTClib.h>
RTC_Millis rtc; //Reloj por software que usa millis()
RTC_Micros rtc; //Reloj por software que usa micros()
//RTC_DS1307 rtc; //Reloj con DS1307
//RTC_DS3231 rtc; //Reloj con DS3231
//RTC_PCF8523 rtc; //Reloj con PCF8523
</pre>
== Parámetros ==
;variable:Nombre de la variable a crear.
;año:4 digitos del año.
;mes:2 digitos del mes entre 1~12.
;dia:2 digitos del dia entre 1~31.
;hora:2 digitos de la hora entre 0~23.
;min:2 digitos de los minutos entre 0~59.
;seg:2 digitos de los segundos entre 0~59.
== Clases ==
Esta librería maneja dos clases:
* [[DateTime]] - es un tipo de dato
* [[TimeSpan()]] - para manejar intervalos de tiempo
== Métodos ==
{| class="wikitable"
|+Métodos disponibles libreria RTClib.h
|-
! Método !! Descripción
|-
| .now() || Toma de fecha y hora actual.
|-
| .adjust() || Ajustar fecha y hora
|-
| .isrunning() || Devuelve verdadero si esta ajustada la fecha hora.
|-
| .readSqwPinMode() || Leer el modo. OFF, ON, SquareWave1Hz, SquareWave4kHz, SquareWave8kHz o SquareWave32kHz.
|-
| .writeSqwPinMode(modo) || Escribir modo.
|}
{| class="wikitable"
|+Modos de sqwPinMode()
|-
! Modo !! Frecuencia
|-
| SquareWave1Hz || 1 kHz
|-
| SquareWave4Hz || 4.096 kHz
|-
| SquareWave8Hz || 8.192 kHz
|-
| SquareWave32Hz || 32.768 kHz
|}
{| class="wikitable"
|+Métodos disponibles clase DateTime
|-
! Método !! Descripción
|-
| .year() || Año
|-
| .month() || Mes (1~12)
|-
| .day() || Dia (1~31)
|-
| .hour() || Horas (0~23)
|-
| .minute() || Minutos (0~59)
|-
| .second() || Segundos (0~59)
|-
| .dayOfTheWeek() || Dia de la semana (0=domingo)
|-
| .secondstime() || Segundos desde 1-ENE-2000
|-
| .unixtime() || Segundos desde 1-ENE-1970
|-
| .timestamp() || Formato "2020-01-01T08:00:00
|}
{| class="wikitable"
|+Métodos clase TimeSpan
|-
! Método !! Descripción
|-
| .days() || Dias (1~31)
|-
| .hours() || Horas (0~23)
|-
| .minutes() || Minutos (0~59)
|-
| .seconds() || Segundos (0~59)
|-
| .totalsecons() || Segundos totales
|}
== Comentarios ==
* Accionar una alarma a las 8 am de cada lunes.
<pre>
DateTime t = now();
if (t.hour() == 8 && t.dayOfTheWeek() = 2){
//Lo necesario
}
</pre>
* Accionar una alarma cada 45 min (2 700 seg).
<pre>
DateTime t = now();
if (t.unixtime()%2700 == 0){
//Lo necesario
}
</pre>
== Advertencias ==
Nada.
== Ejemplo 1 ==
Si usas la librería '''RTClib.h''' tendrás disponible el método '''.unixtime()''' que es excelente para hacer operaciones con fechas.
<syntaxhighlight lang="c++">
#include <RTClib.h>
DateTime t0 (2018,7,14,8,0,0); //2018-7-14 8:00:00
//Calculos 1
DateTime t1 = t0 + TimeSpan(0,1,0,0); //Añadir una hora
DateTime t2 = t0 + TimeSpan(1,0,0,0); //Añadir un dia
DateTime t3 = t0 - TimeSpan(7,0,0,0); //Restar una semana
//Calculos 2
DateTime unix = t0.unixtime(); //1531555200
DateTime t1 (t0.unixtime() + 3600); //Añadir una hora
DateTime t2 (t0.unixtime() + 86400L); //Añadir un dia
DateTime t3 (t0.unixtime() - 7*86400L); //Restar una semana
//Mostrar
Serial.print(t0.unixtime()); //1531555200
Serial.print(t0.year()); //2018
Serial.print(t0.month()); //7
Serial.print(t0.day()); //14
Serial.print(t0.hour()); //8
Serial.print(t0.minute()); //0
Serial.print(t0.second()); //0
</syntaxhighlight>
== Ejemplo 2 ==
Muestra por el monitor serie: año, mes, dia, dia de la semana, hora, minutos y segundos, luego el tiempo Unix y finalmente calcula una fecha futura dentro de: 7 dias, 12 horas, 30 minutos y 6 segundos.
<syntaxhighlight lang="c++">
//#include <Wire.h> //Solo si usas reloj fisico
#include <RTClib.h>
RTC_Millis rtc; //Reloj por software
//RTC_DS1307 rtc; //Reloj con DS1307
//RTC_DS3231 rtc; //Reloj con DS3231
char diaSemana[7][12] = {"Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"};
void setup () {
Serial.begin(57600);
//Para setear RTC con fecha y hora cuando se compila
rtc.begin(DateTime(F(__DATE__), F(__TIME__)));
//Para setear RTC a 21-MAR-2019 8:00:00
//rtc.adjust(DateTime(2019, 3, 21, 8, 0, 0));
}
void loop () {
DateTime hoy = rtc.now();
Serial.print(hoy.year());
Serial.print('-');
Serial.print(hoy.month());
Serial.print('-');
Serial.print(hoy.day());
Serial.print(" (");
Serial.print(diaSemana[hoy.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(hoy.hour());
Serial.print(':');
Serial.print(hoy.minute());
Serial.print(':');
Serial.println(hoy.second());
Serial.print("Desde 1-ENE-1970 = ");
Serial.print("Segundos = ");
Serial.println(hoy.unixtime());
Serial.print("Dias = ");
Serial.println(hoy.unixtime() / 86400L);
//calcula fecha dentro de 7 dias, 12 horas, 30 minutos y 6 segundos
DateTime futuro (hoy + TimeSpan(7,12,30,6));
Serial.print("Fecha futura: ");
Serial.print(futuro.year());
Serial.print('-');
Serial.print(futuro.month());
Serial.print('-');
Serial.print(futuro.day());
Serial.print(' ');
Serial.print(futuro.hour());
Serial.print(':');
Serial.print(futuro.minute());
Serial.print(':');
Serial.print(futuro.second());
Serial.println();
Serial.println();
delay(3000);
}
</syntaxhighlight>
== Ejemplo 3 ==
Este es un reloj con 12 LED que prende un LED cada 5 segundos
<syntaxhighlight lang="c++">
#include <RTClib.h>
RTC_Millis rtc;
const byte led[12] = {13,2,3,4,5,6,7,8,9,10,11,12};
void setup() {
Serial.begin(9600);
rtc.adjust(DateTime(__DATE__, __TIME__));
for (byte i=0; i<12; i++){
pinMode(led[i], OUTPUT);
}
}
void loop() {
DateTime hoy = rtc.now();
if (hoy.unixtime()%5 == 0){
for (byte i=0; i<12; i++){
digitalWrite(led[i], LOW);
}
byte hora = hoy.second()/5;
digitalWrite(led[hora], HIGH);
}
}
</syntaxhighlight>
== Ejemplo 4 ==
Este es un reloj con LCD y dos pulsadores para corregir la hora. Uno adelante y el otro retrocede.
<syntaxhighlight lang="c++">
#include <LiquidCrystal.h>
#include <RTClib.h>
RTC_Millis rtc;
DateTime t;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void setup() {
lcd.begin(16, 2);
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
pinMode(2, INPUT_PULLUP); //Avanza
pinMode(3, INPUT_PULLUP); //Retrocede
lcd.setCursor(2,0);
lcd.print("Hora actual");
}
void loop() {
t = rtc.now();
disp();
//Ajusta hora
if (digitalRead(2) == LOW){
rtc.adjust(t.unixtime()+1);
delay(100);
}
if (digitalRead(3) == LOW){
rtc.adjust(t.unixtime()-1);
delay(100);
}
}
void disp(){
lcd.setCursor(4,1);
if (t.hour() < 10) lcd.print("0");
lcd.print(t.hour());
lcd.print(":");
if (t.minute()< 10) lcd.print("0");
lcd.print(t.minute());
lcd.print(":");
if (t.second() < 10) lcd.print("0");
lcd.print(t.second());
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
<categorytree mode=all>Libreria RTC</categorytree>
== Referencias ==
* [https://github.com/adafruit/RTClib RTClib] - Adafruit
* [https://www.arduinolibraries.info/libraries All Libraries]
* [https://programarfacil.com/blog/arduino-blog/reloj-con-arduino-rtc/ Reloj con Arduino] - Luis Del Valle
* [https://www.luisllamas.es/reloj-y-calendario-en-arduino-con-los-rtc-ds1307-y-ds3231/ Reloj y calendario con RTC] - Luis Llamas
* [https://naylampmechatronics.com/blog/category/page/2.html Tutorial RTC DS1307] - Naylamp
* [https://www.prometec.net/members/avrsanfer/activity/2182/ Proyecto RTC] - Prometec
[[Category:Librerias]]
[[Category:Libreria RTC]]
7otpc6rolt3iuj09rflxksjqk5o82kj
RTClib.h
0
415
3192
2019-05-02T22:46:26Z
Kike GL
2
Kike GL trasladó la página [[RTClib.h]] a [[RTC]]
wikitext
text/x-wiki
#REDIRECCIÓN [[RTC]]
qxetxajgnnsiomfmee1lbtkbveaup07
Read ASCII string
0
237
3747
1007
2019-05-06T22:13:09Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Comunicaciones</categorytree>
== Referencias ==
[[Category:Comunicaciones]]
d8atefw72kf74bl7caf89mtyl0c79fx
Read analog voltage
0
150
3705
3704
2019-05-06T21:53:07Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Este ejemplo muestra cómo leer una entrada analógica en el pin analógico A0, convertir los valores de [[analogRead()]] en voltaje e imprimirlo en el monitor serie del software Arduino (IDE).
== Circuito ==
Conecta un potenciometro de 10K para simular el sensor. Los extremos deben ir a +5V y GND respectivamente el centro (cursor) lo debes conectar al pin analógico A0.
Al girar el eje del potenciómetro, cambia la cantidad de resistencia en cada lado del potenciómetro y este se convierte en un divisor de tension.
El uC del Arduino tiene un circuito interno denominado [[ADC]] que lee esta tensión y la convierte en un número entre 0~1023. Cuando el eje gira completamente en una dirección, hay 0 voltios que van al pin, y el valor de entrada es 0. Cuando el eje se gira completamente en la dirección opuesta, hay +5V que van al pin A0 y el valor sera 1023. Es decir [[analogRead()]] devuelve un número entre 0~1023 que es proporcional a la cantidad de voltaje que se aplica al pin analogico A0.
== Placa aplicable ==
Todas.
== Código ==
Tenemos un sensor en al pin analógico A0 y queremos saber que tensión esta entregando.
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(11520);
}
void loop() {
int sensor = analogRead(A0);
//Convierte lectura sensor (0~1023) a tension (0~5V)
float voltaje = sensor * (5.0 / 1023.0);
Serial.println(voltaje);
}
</syntaxhighlight>
== Comentarios ==
* Nota que '''NO''' es necesario usar [[pinMode()]] en las entradas analogicas.
== Vea también ==
<categorytree mode=all>Basicos</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Tutorial/ReadAnalogVoltage Ejemplos incluidos]
[[Category:Basicos]]
sm30rj5pp2e1wl43qsj50walurabgpy
Rebote
0
382
5052
5049
2019-10-07T22:01:30Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
El '''rebote''' es un efecto muy comun en los contactos electricos del tipo pulsadores, interruptores, contactos de rele, etc. Debido a problemas fisicos y mecanicos se produce un chisporroteo, que al ser leido por Arduino se convierte en muchos pulsos de un corto periodo, de forma que el pulsar el boton una sola vez puede causar resultados impredesibles.
== Solucion 1 ==
La mejor solucion es por hardware poniendo un condensador de 1 uF en paralelo con el pulsador.
== Solucion 2 ==
La solución por software mas simple consiste en aplicar un '''pequeño retardo''' luego de cada vez que se detecta la transicion del pulsador. Eso elimina el ruido.
<syntaxhighlight lang="c++">
void setup() {
pinMode(2, INPUT); //Pulsador
pinMode(13, OUTPUT); //LED
}
void loop() {
//Lee la entrada
if (digitalRead(2)){
digitalWhite(13, !digitalRead(13));
delay(50); //Retardo que elimina ruido
}
}
</syntaxhighlight>
== Solucion 3 ==
Otra solución simple que funciona la mayoría de las veces es fijarse en el estado anterior del botón asi.
<syntaxhighlight lang="c++">
bool estado,anterior;
void setup() {
pinMode(2, INPUT_PULLUP); //Pulsador
pinMode(13, OUTPUT); //LED
}
void loop() {
estado = digitalRead(2);
if (!estado && anterior) {
digitalWrite(13, !digitalRead(13));
}
anterior = estado;
}
</syntaxhighlight>
== Solución 4 ==
Quizás los puristas que desean desterrar la función [[delay()]] prefieran usar esta solución:
<syntaxhighlight lang="c++">
unsigned long tiempo;
void setup() {
pinMode(2, INPUT); //Pulsador
pinMode(13, OUTPUT); //LED
}
void loop() {
//Lee la entrada
if (digitalRead(2)){
if (millis() > tiempo + 50){
digitalWhite(13, !digitalRead(13));
tiempo = millis();
}
}
}
</syntaxhighlight>
== Solución 5 ==
Una solución que funciona muchas veces se trata simplemente de comparar el estado del pulsador con su estado anterior y solo actuar si su estado es HIGH y su anterior LOW.
<syntaxhighlight lang="c++">
const byte boton = 2;
bool estado,anterior;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
estado = digitalRead(boton);
if (estado && !anterior){
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
anterior = estado;
}
</syntaxhighlight>
{{Tip|Este es mi preferido por lo simple.}}
== Solución 6 ==
El siguiente boceto se basa en la versión de rebote de Limor Fried. En este ejemplo, el pulsador retorna HIGH cuando se presiona y LOW cuando no se presiona.
Cada vez que el pin de entrada pasa de LOW a HIGH (se pulso el botón), el pin de salida cambia de LOW a HIGH y HIGH a LOW varias veces. Para ignorar este ruino se introduce un retraso mínimo entre las conmutaciones.
<syntaxhighlight lang="c++">
const byte boton = 2; //Pulsador
const byte led = 13; //LED
bool ledState = HIGH; //El estado actual del pin de salida (LED).
bool buttonState; //El estado actual del pin de entrada (Pulsador).
bool lastButtonState = LOW; //El estado anterior del pin de entrada (Pulsador).
unsigned long tiempo = 0; //Ultima vez que cambio la entrada (pulsador)
unsigned long retardo = 50; //Tiempo de retardo. Aumentar si salida parpadea
void setup() {
pinMode(boton, INPUT);
pinMode(led, OUTPUT);
digitalWrite(led, ledState);
}
void loop() {
//Lee la entrada
bool reading = digitalRead(boton);
//Comprueba si acaba de pulsar (LOW a HIGH)
if (reading != lastButtonState) {
//Reinicia temporizador
tiempo = millis();
}
if ((millis() - tiempo) > retardo) {
if (reading != buttonState) {
buttonState = reading;
//Solo cambia LED si es pulsado
if (buttonState) {
ledState = !ledState;
}
}
}
digitalWrite(led, ledState);
lastButtonState = reading;
}
</syntaxhighlight>
== Solución 7 ==
<syntaxhighlight lang="c++">
bool actual,anterior;
unsigned long db;
byte modo = 1;
void setup(){
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
}
void loop(){
actual = digitalRead(2);
if (!actual && anterior && millis()-db >= 150UL){
modo++;
if (modo > 5){
modo = 1;
}
Serial.println(modo);
db = millis();
}
anterior = actual;
}
</syntaxhighlight>
== Solución 8 ==
Eliminación del rebote mediante [http://playground.arduino.cc/code/debounce libreria Debounce]
<syntaxhighlight lang="c++">
#include <Debounce.h>
Debounce rebote = Debounce(20, 2); //Asigna 20 ms de retardo en pulsador
void setup() {
pinMode(2, INPUT); //Pulsador
pinMode(13, OUTPUT); //LED
}
void loop() {
rebote.update(); //Actualizar instancia de clase
digitalWrite(13, rebote.read()); //Obtener pulso
}
</syntaxhighlight>
== Solución 9 ==
Eliminación del rebote mediante [https://github.com/thomasfredericks/Bounce2/wiki libreria Bounce2]
{| class="wikitable"
|-
! Método !! Descripción
|-
| .read() || Lee el estado del pin actualizado.
|-
| .fell() || Devuelve verdadero si el pin pasa de HIGH a LOW. (falling)
|-
| .rose() || Devuelve verdadero si el pin pasa de LOW a HIGH. (rising)
|}
<syntaxhighlight lang="c++">
#include <Bounce2.h>
Bounce rebote = Bounce(2, 50); //Instancia de la clase con retardo de 50 ms
void setup() {
pinMode(2, INPUT_PULLUP); //Pulsador
pinMode(13, OUTPUT); //LED
}
void loop() {
rebote.update(); //Actualiza instancia de clase
if (rebote.rose()){; //Lee pulsador cuando se suelta
digitalWrite(13, !digitalRead(13); //Conmuta LED
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones pines</categorytree>
== Referencias ==
* [http://playground.arduino.cc/code/debounce Playground]
* [https://www.luisllamas.es/debounce-interrupciones-arduino/ Debounce] - Luis Llamas
* [https://aprendiendoarduino.wordpress.com/2017/06/19/ejemplos-practicos-arduino/ Ejemplos prácticos Arduino] - Enrique Crespo
* [https://manueldelgadocrespo.blogspot.com/p/digitalread.html DigitalRead] - Manuel Delgado
* [https://programarfacil.com/blog/utilizar-pulsadores-en-arduino/ Utilizar un pulsador sin saber nada de electrónica] - Luis Del Valle
* [https://core-electronics.com.au/tutorials/switch-debouncing-with-arduino.html Interruptores, Debouncing y el Arduino] - Core Electronics
* [https://manualarduinos52.wordpress.com/2013/12/06/practica-6/ Funcion antirebote] - Manual de practicas Arduino
[[Category:Librerias]]
7aek8s7g3fgf4jne3sjg6y9fe1d2q9s
Row column scanning
0
251
1026
2018-06-26T21:15:45Z
Kike GL
2
Página creada con « == Placa aplicable == Todas. == Código == <syntaxhighlight lang="c++"> </syntaxhighlight> == Comentarios == == Vea también == * [[Bar graph]] [[Category:Pantalla]]»
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
* [[Bar graph]]
[[Category:Pantalla]]
dpl1g9t6nnfdneowmou5pkakm1mf5kk
SCADA
0
490
4934
4929
2019-09-21T14:36:05Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
SCADA, acrónimo de Supervisory Control And Data Acquisition (Supervisión, Control y Adquisición de Datos) es un concepto que se emplea para realizar un '''software''' para ordenadores que permite controlar y supervisar procesos industriales a distancia.
== Caracteristicas ==
* Instalación sencilla e inmediata del producto.
* Fácil configuración, incluso cuando se trata de una instalación con puestos remotos (WAN) ya que las comunicaciones entre los equipos cliente y el servidor se basan en los estándares de internet (protocolo HTTP).
* No precisa programación para la creación de proyectos completamente funcionales, basta “pinchar y arrastrar” los objetos SCADA sobre la superficie de los formularios y establecer las propiedades correspondientes para obtener una solución operativa.
* Si se requiere una funcionalidad avanzada que no esté contemplada en los objetos SCADA definidos en Monitoriza no hay problema ya que Monitoriza es extensible mediante programación en C# o VB.Net. También es posible el uso de librerías de terceros desarrolladas para .NET Framework de Windows.
* La creación de la interfaz gráfica de usuarios está basada en la tecnología de Windows Forms Designer de Microsoft© lo que facilita de forma notable el diseño.
* Fácil creación de gráficas para representar la tendencia de las variables.
* Definición inmediata de alarmas.
* Fácil seguimiento de variables.
* Datos en formatos accesibles. Monitoriza permite almacenar las variables que se monitorizan en bases de datos estándar del mercado (Microsoft© SQL Server™, Microsoft© Access™, Oracle®, etc.)
* A nivel de proyecto podemos definir usuarios y los permisos asignados a cada uno ellos. Por ejemplo si solo se tiene permiso de lectura en un determinado formulario o si se tiene acceso total a este.
== Vea también ==
* [[OPC]]
* [[PLC]]
* [[ArdBox]]
* [[PIC]]
* [[AVR]]
* [[FPGA]]
== Referencias externas ==
* [https://www.wonderware.es/hmi-scada/que-es-scada/ Que es SCADA]
* [https://paradiso-fp7.eu/scada/ Beneficios de SCADA]
* [http://www.acimut.com/monitoriza/monitorizaforarduino.html SCADA for Arduino]
* [http://diymakers.es/software-tools-makers-un-scada-para-arduino/ Un SCADA para Arduino]
* [https://www.st4makers.com/ OPC server for Arduino]
1pv24uhbncaqr018o7owlkkxj2umpom
SD
0
390
5276
5275
2020-03-16T17:15:18Z
Kike GL
2
/* Descripción */
wikitext
text/x-wiki
== Descripción ==
La librería [https://github.com/arduino-libraries/SD SD.h] de SparkFun habilita un Arduino para la interacción con tarjetas SD (Secure Digital) mediante el protocolo '''Serial Peripheral Interface''' ([[SPI]]). A pesar de que existen tres tamaños distintos, todos operan exactamente de la misma manera (a determinada capacidad); por lo tanto, esta librería funciona con todos los tamaños.
Debido a que usa [[SPI]], la conexión debe realizarse hacia los respectivos pines del Arduino; salvo SS/CS, este puede conectarse en cualquier pin digital libre.
{{Nota|La librería soporta tarjetas SD del estándar '''SC''' y '''HC'''; por esta razón, la capacidad máxima soportada es de '''32 GB'''.}}
{{Tip|Librería oficial, es decir que está preinstalada junto con la [[IDE]] de Arduino, no es necesario descargarla.}}
{{Nota|debido a limitaciones de la librería y sistema de archivos compatibles, el tamaño máximo por archivo es de 4 GB o 4294967295 bytes.}}
Una mejor opción sera la libreria [https://github.com/greiman/SdFat SdFat] de Bill Greiman que soporta FAT16 y FAT32.
== La clase SD ==
Es un objeto preinstanciado que se utiliza para iniciar la tarjeta y realizar operaciones generales sobre el sistema de archivos ([https://es.wikipedia.org/wiki/Tabla_de_asignaci%C3%B3n_de_archivos FAT] en sus versiones de 16 y 32 bits; '''exFAT''' no es compatible).
=== Sintaxis ===
<pre>
#include <SPI.h>
#include <SD.h>
SD.begin(CS);
</pre>
=== Parametros ===
;CS:Puerto 4 si es Aduino Shield.
=== Metodos ===
{| class="wikitable"
|+Metodos de la clase SD
|-
! Método !! Descripción
|-
| [[SD.begin()]] || Intenta inicializar la tarjeta SD al modo SPI, para así obtener de esta la información necesaria para empezar a usarla.
|-
| [[SD.end()]] || Devuelve la librería al estado inicial; útil para remover, "en caliente" y de forma segura, la tarjeta.
|-
| [[SD.open()]] || Abre un archivo o una carpeta.
|-
| [[SD.exists()]] || Verifica si determinado archivo o carpeta realmente existe en la tarjeta.
|-
| [[SD.remove()]] || Elimina un archivo.
|-
| [[SD.mkdir()]] || Crea un directorio (carpeta).
|-
| [[SD.rmdir()]] || Elimina un directorio (carpeta).
|}
{{Nota|prácticamente ningún otro método funcionará si no se inicializa de antemano la tarjeta SD.}}
== La clase File ==
Es un objeto que representa la instancia de un fichero (archivo) o directorio (carpeta) dentro de la tarjeta SD; con este se interactúa directamente sobre ellos. Se crea mediante las funciones [[SD.open()]] o [[File.openNextFile()]].
=== Sintaxis ===
<pre>
File variable1 = SD.open(nombre, modo);
File variable2 = variable1.openNextFile();
</pre>
=== Parámetros ===
;variable:Nombre de variable a instanciar.
;nombre:Nombre de archivo SFN (8.3). Ejemplo log12345.txt.
;modo:Puede ser FILE_WRITE o FILE_READ
=== Metodos ===
{| class="wikitable"
|+Metrodos de la clase File
|-
!Método!!Descripción
|-
| [[File.read()]] || Lee un byte/caracter o varios del archivo.
|-
| [[File.peek()]] || Lee un byte/caracter del archivo sin avanzar al siguiente.
|-
| [[File.available()]] || Retorna la cantidad de bytes/caracteres disponibles para leer (antes de llegar al final del archivo).
|-
| [[File.write()]] || Escribe un byte/caracter o varios al archivo. Suele usarse para archivos binarios.
|-
| [[File.print()]] || Escribe una representación textual de un dato (o una cadena de caracteres) al archivo. Suele usarse para archivos de texto plano.
|-
| [[File.println()]] || Igual al anterior, excepto que agrega una nueva línea de texto.
|-
| [[File.flush()]] || Fuerza la actualización de los datos en la tarjeta SD.
|-
| [[File.seek()]] || Posiciona el "cursor" del archivo hacia una posición dada.
|-
| [[File.position()]] || Retorna la posición actual del "cursor" del archivo.
|-
| [[File.size()]] || Retorna el tamaño del archivo (en bytes).
|-
| [[File.name()]] || Retorna el nombre del archivo/carpeta.
|-
| [[File.isDirectory()]] || Verifica si esta instancia realmente representa un directorio (carpeta) y no un archivo regular.
|-
| [[File.openNextFile()]] || Abre el siguiente archivo de la lista (válido si esta instancia representa un directorio/carpeta).
|-
| [[File.rewindDirectory()]] || Devuelve la iteración de archivos al comienzo (válido si esta instancia representa un directorio/carpeta).
|-
| [[File.close()]] || Cierra el archivo (o carpeta) para liberar correctamente cualquier recurso que esté siendo utilizado por esta instancia.
|}
{{Nota|Prácticamente ningún método funcionará si la instancia es "vacía" o representa un archivo/carpeta sin abrir.}}
=== Formato de la ruta de acceso ===
Esta librería utiliza el formato de rutas de UNIX/Linux: el nombre de las carpetas involucradas se separa con '''/''' (barra inclinada o slash), siendo el destino final el último nombre de la secuencia. Por ejemplo:
<pre>
datos.txt
ruta/hacia/el/archivo/que/buscamos.txt
</pre>
Esto hará que el archivo '''datos.txt''' sea creado o buscado en el directorio raíz; en otras palabras, fuera de toda carpeta.
{{Nota|Para efectos del sistema de archivos, los nombres '''NO SON''' sensibles a las mayúsculas; por lo tanto, '''datos.txt''', '''Datos.txt''' y '''DATOS.TXT''' hacen referencia al mismo archivo. Lo mismo aplica para directorios/carpetas.}}
Siendo '''ruta''', '''hacia''', '''el''', '''archivo''' y '''que''' las carpetas que nos llevan al archivo '''buscamos.txt'''
Ese destino no tiene que ser solamente un archivo regular, también podría ser otra carpeta.
Si es algo que queremos colocar o ubicar en la "raíz", basta con simplemente colocar el nombre del elemento. Por ejemplo:
{{Nota|ya que el directorio de trabajo de la librería siempre es la raíz, da igual que la ruta sea absoluta (con '''/''' al comienzo) o relativa (sin '''/''' al comienzo).}}
=== Nombres SFN (8.3) ===
Parte de la escritura de rutas también involucra respetar el formato SFN (Short File Name o nombre corto de archivo), el cuál sigue estas reglas:
* El nombre del elemento debe tener como mínimo 1 carácter, y como máximo 8 caracteres.
* Si es un archivo regular, debe haber un único punto ('''.''') justo después del nombre.
* Si es un archivo regular, deben haber de 1 a 3 caracteres después del antes mencionado punto. Esto es lo que se conoce como la "extensión", una forma burda (pero muy usada en Windows) de etiquetar archivos por su contenido (ej.: '''txt''' para texto plano, '''jpg''' para imágenes codificadas en JPEG, '''mp3''' para audio codificado en MPEG capa 3, etc.).
{{Nota|deduciendo de las reglas anteriores, los directorios/carpetas solo deben cumplir la primera; no debe haber punto ('''.''') ni extensión en el nombre.}}
=== Caracteres permitidos ===
En el nombre puede venir cualquier carácter, excepto los siguientes:
* <code>" * + , / : ; < = > ? \ [ ] | </code>
* Los que tienen un valor decimal del 0 al 31
* El carácter de valor decimal 127
* El punto ('''.''') sólo si no es antecedido por al menos un caracter permitido.
Técnicamente se permite el carácter espaciador y los del ASCII extendido (valor decimal del 128 al 255), sin embargo el primero no se recomienda porque puede hacer más complicado programar la generación de rutas; y lo segundo tampoco ya que la codificación no es estándar entre regiones geográficas (lo que puede llevar a una interpretación errónea del nombre en cuestión), eso sin contar que si el primer carácter es de valor '''0xE5''' (229 decimal), la librería podría después mal interpretarlo como un archivo eliminado (que no existe).
Curiosamente, las letras minúsculas están prohibidas; sin embargo esto no es cierto al crear e ingresar la ruta, ya que la librería automáticamente usa, en su lugar, las respectivas contrapartes mayúsculas al procesarla.
=== Comentarios ===
Hereda de la clase [[Stream]], lo que quiere decir que prácticamente comparte la mayoría de métodos (y funcionalidad) de incluso la clase [[Serial]]. Que algunos no sean mencionados en esta página, no quiere decir que no se puedan usar.
{{Nota|a partir de la versión 1.0 del [[IDE]] de Arduino, se permite tener múltiples archivos abiertos a la vez.}}
{{Nota|El flujo de entrada y salida de esta clase se categorizan como '''por bloques'''.}}
{{Nota|Este objeto se puede introducir directamente en un contexto booleano (ej.: como condición de un [[if... else]]); se evaluará como verdadero o '''true''' si el archivo/carpeta que representa está abierto/a en dicha instancia, falso o '''false''' en el caso contrario.}}
=== Cómo agregar fecha y hora a los archivos ===
Todo archivo/fichero y directorio/carpeta tiene por atributos, además del nombre, la fecha y hora de creación, último acceso y última modificación (datos que se pueden mirar en las "propiedades" o "detalles" del elemento, en el explorador de archivos de tu PC). La librería por defecto no tiene definido cómo obtener dicha información; pero cuando es requerido, por defecto coloca el '''01/01/2000 1:00:00 am''' aunque haya transcurrido un tiempo desde que el sistema ha arrancado.
Para definir la obtención de esos datos, primero debes crear una función con la siguiente "firma" (declaración):
<pre>void nombreFuncion(uint16_t* fecha, uint16_t* hora)</pre>
'''Quiere decir que dicha función DEBE retornar [[void]] y DEBE tener dos parámetros de tipo [[word|word o uint16_t]][[asterisco|*]]. El nombre no es importante.'''
En dicha función, programarás la obtención de la fecha y hora actualizados; que pueden provenir de un reloj generado por software, un reloj NTP o un RTC.
Luego, en el [[setup()]], colocas esta línea para así otorgarle dicha definición a la librería:
<pre>SdFile::dateTimeCallback(nombreFuncion);</pre>
== Advertencias ==
* Para efectos del sistema de archivos, los nombres '''NO SON''' sensibles a las mayúsculas; por lo tanto, '''datos.txt''', '''Datos.txt''' y '''DATOS.TXT''' hacen referencia al mismo archivo. Lo mismo aplica para directorios/carpetas.
* Atento al uso de la [[SRAM]], esta librería suele ser intensiva en ese recurso. Inicialmente consume alrededor de 700 bytes de este tipo de memoria.
* La tarjeta debe estar formateada en FAT16 o FAT32 con [https://www.sdcard.org/downloads/formatter_4/ SDFormatter] ('''NUNCA CON LOS UTILITARIOS DEL SISTEMA OPERATIVO'''), de lo contrario no funcionará con la librería o podría tener un bajo rendimiento.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
void obtenerFechaHora(uint16_t* fecha, uint16_t* hora) {
// Aquí llamas al reloj para que actualice los datos
*fecha = FAT_DATE(anio, mes, dia);
*hora = FAT_TIME(hora, minuto, segundo);
}
void setup() {
// Todas las demás inicializaciones
SdFile::dateTimeCallback(obtenerFechaHora);
}
void loop() {
// El resto del programa
}
</syntaxhighlight>
Siendo '''anio''' una variable de tipo [[unsigned int]], mientras que el resto de componentes son de tipo [[byte]]. El año se agrega con un valor que tenga los cuatro dígitos.
El rango de fecha y hora válido es del '''01/01/1980 12:00:00 am''' al '''31/12/2107 11:59:59 pm'''.
Una vez "adjuntada", esta función se utiliza de manera similar a como ocurre en las [[attachInterrupt()|interrupciones]]: implícitamente cuando la librería la necesite.
La fecha/hora de creación se aplica únicamente al momento de crear un archivo/carpeta que antes no existía; la de acceso con el simple hecho de lograr abrirla; y la de modificación cuando se cierra un archivo regular que fue abierto para escritura, o cuando una subcarpeta adquiere o pierde contenido.
== Ejemplo 2 ==
Este ejemplo muestra como conectar SD mediante [[SPI]], con MOSI, MISO, CLK, CS (11,12,13,4). CS puede variar segun si es Arduino Shield (4), Adafuit (19, Sparkfun(8) o MKRZero. Es el mismo ejemplo de '''CardInfo''', solo que los mensajes se han traducido al español.
<syntaxhighlight lang="c++">
#include <SPI.h>
#include <SD.h>
Sd2Card card;
SdVolume volume;
SdFile root;
const int chipSelect = 4; //Arduino Ethernet shield, o cambiar según corresponda.
void setup() {
Serial.begin(9600);
Serial.print("Inicializando SD...");
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
Serial.println("Error con SD:");
Serial.println("* la trajeta SD esta puesta ?");
Serial.println("* los cables estan correctos ?");
Serial.println("* pin de chipSelect es correcto segun modelo ?");
while (1);
} else {
Serial.println("Conexiones correctas y tarjeta SD en su lugar.");
}
Serial.println();
Serial.print("Tipo de tarjeta: ");
switch (card.type()) {
case SD_CARD_TYPE_SD1:
Serial.println("SD1");
break;
case SD_CARD_TYPE_SD2:
Serial.println("SD2");
break;
case SD_CARD_TYPE_SDHC:
Serial.println("SDHC");
break;
default:
Serial.println("Desconocido");
}
if (!volume.init(card)) {
Serial.println("No encuentro particion FAT16/FAT32. La tarjeta esta formateada ?");
while (1);
}
Serial.print("Clusteres: ");
Serial.println(volume.clusterCount());
Serial.print("Sectores por Cluster: ");
Serial.println(volume.blocksPerCluster());
Serial.print("Total de sectores: ");
Serial.println(volume.blocksPerCluster() * volume.clusterCount());
Serial.println();
uint32_t volumesize;
Serial.print("El tipo de volumen es: FAT");
Serial.println(volume.fatType(), DEC);
volumesize = volume.blocksPerCluster();
volumesize *= volume.clusterCount();
volumesize /= 2; // Bloques (sectores) de una SD son de 512 bytes (2 bloques abarcan 1 KB o 1024 bytes)
Serial.print("Tamanio del volumen (KB): ");
Serial.println(volumesize);
Serial.print("Tamanio del volumen (MB): ");
volumesize /= 1024;
Serial.println(volumesize);
Serial.print("Tamanio del volumen (GB): ");
Serial.println((float)volumesize / 1024.0);
Serial.println("\r\nArchivos en SD (nombre, fecha y tamanio en bytes): ");
root.openRoot(volume);
// Mostrar contenido
root.ls(LS_R | LS_DATE | LS_SIZE);
}
void loop(void) {
// Nada
}
</syntaxhighlight>
== Ejemplo 3 ==
Data logger.
<syntaxhighlight lang="c++">
#include <SPI.h>
#include <SD.h>
const int chipSelect = 4;
void setup() {
Serial.begin(9600);
Serial.print("Inicializando SD...");
if (!SD.begin(chipSelect)) {
Serial.println("SD fallo, esta puesta ?");
while (1);
}
Serial.println("SD lista.");
}
void loop() {
String data = "";
for (byte analogPin=0; analogPin<3; analogPin++) {
int sensor = analogRead(analogPin);
data += String(sensor);
if (analogPin < 2) {
data += ",";
}
}
File File = SD.open("datalog.txt", FILE_WRITE);
if (File) {
File.println(data);
File.close();
Serial.println(data);
}else{
Serial.println("Error abriendo datalog.txt");
}
}
</syntaxhighlight>
== Ejemplo 4 ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries/sd SD] - All Libraries
* [http://www.arduino.cc/en/Reference/SD SD]
* [https://en.wikipedia.org/wiki/8.3_filename Artículo de Wikipedia sobre los nombres SFN (en inglés)]
* [https://www.luisllamas.es/tarjeta-micro-sd-arduino/ Leer y escribir en tarjeta SD] - Luis Llamas
* [https://naylampmechatronics.com/blog/38_Tutorial-Arduino-y-memoria-SD-y-micro-SD-.html Memorias SD y microSD] - Naylamp
* [https://aprendiendoarduino.wordpress.com/category/sd/ SD] - Enrique Crespo
* [http://manueldelgadocrespo.blogspot.com/p/biblioteca-sd.html Biblioteca SD] - Manuel Delgado
* [https://www.prometec.net/sdcard/ SDcard] - Prometec
* [https://eldesvandejose.com/2016/05/12/la-libreria-sd/ Libreria SD] - El desvan de José
[[Category:Librerias]]
[[Category:Libreria SD]]
51kbfhkc5kacf3ls1nomm7rc6vqhfl9
SD.begin()
0
411
3945
3455
2019-05-17T20:39:05Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Intenta inicializar la tarjeta SD al modo [[SPI]], para así obtener de esta la información necesaria para empezar a usarla.
Aunque llamar esta función cuando la tarjeta ya había sido inicializada no la perjudica (y prácticamente no tendría efecto alguno en el programa), de todas formas sería un desperdicio de tiempo ya que ejecutar esta función puede tardar hasta un segundo. Donde sí valdría la pena sería al dar soporte de remoción "en caliente", porque cada vez que una tarjeta SD pierda energía, hay que pasar por este proceso al reinsertarse.
== Sintaxis ==
<pre>
SD.begin([velocidad, ]pinCS);
</pre>
== Parametros ==
;velocidad: frecuencia del reloj SPI en Hertz ([[unsigned long]]). Si excede el máximo soportado por el microcontrolador, dicho máximo se utilizará en su lugar. El valor máximo absoluto es de 20000000 (20 MHz).
;pinCS: el número del pin utilizado para la línea "Chip Select" (o "Slave Select"/SS) de la tarjeta ([[byte]]).
== Retorna ==
'''true''' si la tarjeta pudo ser inicializada con éxito, '''false''' en caso contrario ([[bool]]).
== Comentarios ==
Este proceso de inicialización sigue tres pasos:
* Poner la tarjeta en modo SPI mediante el envío de cierto comando una cantidad determinada de veces. Si no se da la respuesta esperada en alguno de los intentos, el proceso falla inmediatamente. Esta etapa esencialmente verifica el hardware (lo físico); en otras palabras, puede fallar por mala alimentación (de la tarjeta), mala conexión, o incluso por tarjeta defectuosa o que de pleno no soporta [[SPI]].
* Leer la tabla de particiones (también llamados "volúmenes") para así encontrar alguna con el sistema de archivos FAT (16 o 32). Si se falla en esta etapa, es posible que la tarjeta no esté formateada al sistema FAT.
* Abrir el directorio raíz una vez encontrada la partición FAT. Si falla, podría ser problema de hardware (ej.: desconexión de la tarjeta antes de llegar a esta etapa) o el sistema de archivos está dañado (reparable mediante formateo o el comando '''chkdsk''' en Windows).
En el momento que alguno fracase, es dónde la función retorna '''false'''. Ya que el dato de retorno no es muy específico para diagnosticar posibles problemas con la tarjeta, se recomienda subir y ejecutar el ejemplo '''CardInfo''' para dicha tarea. Ese programa imprime (en el monitor serial) un mensaje de error dependiendo de en cuál de las dos primeras etapas ha fallado; si llega a imprimir una lista del contenido (archivos y carpetas) de la tarjeta, significa que todo está en orden.
== Advertencia ==
Este método solo estará disponible luego de incluir la libreria [[SD]].
== Ejemplo ==
<syntaxhighlight lang="c++">
#include <SPI.h>
#include <SD.h>
void setup() {
Serial.begin(9600);
if (!SD.begin(4)){
Serial.println("Fallo en la tarjeta");
}else{
Serial.println("Tarjeta iniciada");
}
//Hacer algo con la SD
SD.end()
Serial.println("Puedes sacar la tarjeta con seguridad.");
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias externas ==
* [https://github.com/arduino-libraries/SD Libreria SD]
* [https://www.arduinolibraries.info/libraries All Libraries]
[[Category:Libreria SD]]
6p1634gqv9gyy6mpg2j6g7i2f4881cj
SD.end()
0
412
4605
3946
2019-07-03T19:22:54Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Devuelve la librería al estado inicial, usualmente para mantener la consistencia ante eventos como la remoción de la tarjeta mientras el programa está corriendo.
== Sintaxis ==
<pre>
SD.end();
</pre>
== Parametros ==
Nada.
== Retorna ==
Nada.
== Advertencias ==
* Este método solo estará disponible luego de incluir la libreria [[SD]] y haber usado el motodo [[SD.begin()]].
* Antes de llamar esta función, asegúrate primero de [[File.close()|cerrar]] cualquier archivo previamente abierto.
== Ejemplo ==
<syntaxhighlight lang="c++">
#include <SPI.h>
#include <SD.h>
void setup() {
Serial.begin(9600);
if (SD.begin(4)){
Serial.println("Tarjeta SD lista");
}else{
Serial.println("Fallo en la tarjeta SD");
}
// Hacer algo más con la tarjeta
SD.end();
Serial.println("Ahora se puede retirar la tarjeta con seguridad");
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias externas ==
* [https://github.com/arduino-libraries/SD Libreria SD]
* [https://www.arduinolibraries.info/libraries All Libraries]
[[Category:Libreria SD]]
cn57zjewpyagnsaw6nw0j5rimzj1ha4
SD.exists()
0
424
4606
3949
2019-07-03T19:27:04Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Verifica si la ruta hacia cierto elemento (archivo o carpeta) realmente existe.
== Sintaxis ==
<pre>
SD.exists(ruta);
</pre>
== Parametros ==
;ruta: ruta hacia el archivo o carpeta que se pretende verificar, o sólo el nombre para ubicarlo en la "raíz" ([[string]] o [[String]]).
== Retorna ==
'''true''' si el elemento existe en dicha ubicación, '''false''' en caso contrario ([[bool]]).
== Advertencias ==
Nada.
== Ejemplo ==
Similar al ejemplo 2 de [[SD.open()]], solo que utilizando esta función.
<syntaxhighlight lang="c++">
#include <SPI.h>
#include <SD.h>
File archivo;
void setup() {
if (!SD.begin(chipSelect)) {
Serial.println("SD fallo, esta puesta ?");
while (1);
}
Serial.println("SD lista.");
char nombre[13];
unsigned int contador = 0;
sprintf(nombre, "DATA%04d.CSV", contador);
while (SD.exists(nombre)) {
if (++contador > 9999) { //Si ya se agotaron los cuatro dígitos, no queda de otra que sobrescribir desde la 0000.
contador = 0; //Lo malo es que esto siempre lo haría si llegara a suceder.
sprintf(nombre, "DATA%04d.CSV", contador);
break;
}
sprintf(nombre, "DATA%04d.CSV", contador);
}
archivo = SD.open(nombre, FILE_WRITE | O_TRUNC);
}
void loop() {
//A este punto ya es cuestión de solamente usar la instancia.
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
[[Category:Libreria SD]]
sg839pglpx9ft3ce968l97i06qj9ct3
SD.mkdir()
0
427
3950
3458
2019-05-17T20:40:24Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Crea un directorio (carpeta) o toda una ruta (jerarquía). Para esto último, automáticamente se crea cualquier directorio faltante que la conforma.
== Sintaxis ==
<pre>
SD.mkdir(ruta);
</pre>
== Parametros ==
;ruta: carpeta o ruta que se pretende crear ([[string]] o [[String]]). Esta siempre será relativa a la raíz; en otras palabras, siempre será absoluta para efectos del sistema de archivos.
== Retorna ==
'''true''' si se pudo crear, '''false''' en caso contrario ([[bool]]). Si falla, es por error de hardware o porque el "volumen" está lleno.
== Advertencias ==
Nada.
== Ejemplo ==
Creamos una separación (en carpetas) de imágenes según el año de obtención, desde el 1990 hasta el año que se creó esta página (2019). Cada año estará separado por sus meses.
<syntaxhighlight lang="c++">
#include <SPI.h>
#include <SD.h>
void setup() {
Serial.begin(9600);
Serial.print("Inicializando SD...");
if (!SD.begin(chipSelect)) {
Serial.println("SD fallo, esta puesta ?");
while (1);
}
Serial.println("SD lista.");
char ruta[50];
// Algunos nombres fueron recortados para respetar el límite de 8 caracteres. Si fuera el caso, se podrían abreviar por las tres primeras letras.
char mes[12][] = {"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Setiembr", "Octubre", "Noviembr", "Diciembr"};
for (unsigned int anio=1990; anio<=2019; anio++) {
for (byte m=0; i<12; i++) {
sprintf(ruta, "Imagenes/%d/%s", anio, mes[m]);
if (SD.mkdir(ruta)) {
Serial.print("La ruta ");
Serial.print(ruta);
Serial.print(" se ha creado con éxito!");
}else {
Serial.print("La ruta ");
Serial.print(ruta);
Serial.print(" no se ha podido crear!");
}
}
}
}
void loop() {
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
* [https://www.arduinolibraries.info/libraries All Libraries]
* [http://www.arduino.cc/en/Reference/SD SD]
[[Category:Libreria SD]]
lm0qzxh4b2w7neh2moectbavkaji5zd
SD.open()
0
475
4629
4616
2019-07-03T21:27:21Z
Kike GL
2
/* Descripción */
wikitext
text/x-wiki
== Descripción ==
Es el método principal para crear la instancia de la '''clase File''' (fichero/archivo) o directorio (carpeta) dentro de la tarjeta SD; con este se interactúa directamente sobre ellos.
{{Tip|También se puede usar el método [[File.openNextFile()]].}}
== Sintaxis ==
<pre>
File variable = SD.open(nombre, modo);
</pre>
== Parámetros ==
;variable:Nombre de variable a instanciar.
;nombre:Nombre de archivo SFN (8.3). Ejemplo log12345.txt.
;modo:Puede ser FILE_WRITE o FILE_READ
== Advertencias ==
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias externas ==
[[Category:Libreria SD]]
5jhgzv3h29pxo012r4gudnxpmdlgg0z
SD.remove()
0
425
3948
3457
2019-05-17T20:39:55Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Elimina el archivo en la ruta dada.
== Sintaxis ==
<pre>
SD.remove(ruta);
</pre>
== Parametros ==
;ruta: ruta hacia el archivo que se pretende eliminar, o sólo el nombre para ubicarlo en la "raíz" ([[string]] o [[String]]).
== Retorna ==
'''true''' si se pudo eliminar, '''false''' en caso contrario ([[bool]]). Si falla, es porque el archivo no existe en esa ubicación, o la ruta apunta a un directorio/carpeta.
== Advertencias ==
* Asegúrate de que dicho archivo no esté abierto antes de intentar eliminarlo.
* Esta función no puede eliminar carpetas; para eso, usa [[SD.rmdir()]] en su lugar.
== Ejemplo ==
<syntaxhighlight lang="c++">
#include <SPI.h>
#include <SD.h>
const char[] nombre = "Borrame.txt";
void setup() {
Serial.begin(9600);
// Inicializamos la tarjeta por supuesto
if (SD.remove(nombre)) {
Serial.print(nombre);
Serial.println(" se ha logrado eliminar.");
} else {
Serial.print(nombre);
Serial.println(" no se puede eliminar porque no existe.");
}
}
void loop() {
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
[[Category:Libreria SD]]
c092lop87wk5yj1763zw8fey43l0d0q
SD.rmdir()
0
426
3947
3460
2019-05-17T20:39:41Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Elimina el directorio (carpeta) en la ruta dada.
== Sintaxis ==
<pre>
SD.rmdir(ruta);
</pre>
== Parametros ==
;ruta: ruta hacia la carpeta que se pretende eliminar, o sólo el nombre para ubicarlo en la "raíz" ([[string]] o [[String]]).
== Retorna ==
'''true''' si se pudo eliminar, '''false''' en caso contrario ([[bool]]). Si falla, es porque el directorio no existe en esa ubicación, existe pero no está vacío, o la ruta apunta a un archivo regular.
== Advertencias ==
* Asegúrate de que dicha carpeta no esté abierta antes de intentar eliminarla.
* Por razones obvias, la "raíz" nunca se puede eliminar.
== Ejemplo ==
<syntaxhighlight lang="c++">
#include <SPI.h>
#include <SD.h>
const char[] nombre = "Imagenes"; // Debe ser una carpeta, por eso no lleva extensión
void setup() {
Serial.begin(9600);
// Inicializamos la tarjeta por supuesto
if (SD.rmdir(nombre)) {
Serial.print("La carpeta ");
Serial.print(nombre);
Serial.println(" se ha logrado eliminar.");
} else {
Serial.print("La carpeta ");
Serial.print(nombre);
Serial.println(" no se puede eliminar porque no existe o no esta vacia.");
}
}
void loop() {
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria SD</categorytree>
== Referencias ==
[[Category:Libreria SD]]
pfgs5vkgal2ulbsnusj8c880ofvmdjn
SPI
0
122
3378
3270
2019-05-05T04:35:07Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
Esta librería permite comunicarse con dispositivos SPI, usando Arduino como elemento maestro (master)
Serial Peripheral Interface (SPI) es un protocolo de de comunicación serie rápida entre dispositivos a corta distancia. Aparte de entre Arduino y periféricos, también permite comunicación entre microcontroladores.
En una comunicación SPI hay siempre un maestro (master) que controla los periféricos. Típicamente hay tres líneas de control comunes a todos los elementos.
* MISO (Master In Slave Out)- Línea para mandar datos al maestro desde el esclavo
* MOSI (Master Out Slave IN)- Línea para mandar datos a los periféricos
* SCK (Serial Clock)- Pulsos de reloj para sincronizar la transmisión de datos generada por el maestro a una línea específica de cada periférico.
* SS (Slave Select)- El pin en cada periférico que el maestro activa o desactiva para que los datos lleguen al dispositivo que queremos.
Cuando el SS (Slave Select) esta bajo (low), el comunica con el maestro y lo ignora cuando esta en alto (high). Esto nos permite tener múltiples dispositivos compartiendo las mismas líneas de MISO, MOSI y CLK.
== Placas aplicables ==
La siguiente tabla muestra en que pines están las líneas SPI en diferentes placas.
{| class="wikitable col5cen col6cen col7cen"
|+Pines SPI en varios Arduino
|-
! Arduino/Genuino
! MOSI
! MISO
! SCK
! SS (slave)
! SS (master)
! Nivel
|-
| Uno o Duemilove
| 11 ó ICSP-4
| 12 ó ICSP-1
| 13 ó ICSP-3
| 10
| --
| 5V
|-
| Mega1280 ó 2560
| 51 ó ICSP-4
| 50 ó ICSP-1
| 52 ó ICSP-3
| 53
| --
| 5V
|-
| Leonardo
| ICSP-4
| ICSP-1
| ICSP-3
| --
| --
| 5V
|-
| Due
| ICSP-4
| ICSP-1
| ICSP-3
| --
| 4, 10, 52
| 3,3V
|-
| Zero
| ICSP-4
| ICSP-1
| ICSP-3
| --
| --
| 3,3V
|-
| 101
| 11 ó ICSP-4
| 12 ó ICSP-1
| 13 ó ICSP-3
| 10
| 10
| 3,3V
|-
| MKR1000
| 8
| 10
| 9
| --
| --
| 3,3V
|}
{{Nota|Es importante que las líneas MISO, MOSI y SCK están disponibles en una localización fija en un conector ICSP, esto es útil en el diseño de escudos (shield) que funcionen en todas la placas.}}
== Sintaxis ==
<pre>
#include <SPI.h>
SPI.begin();
</pre>
== Modos de operacion ==
En términos generales, hay cuatro modos de transmisión. Estos modos controlan si los datos se desplazan hacia adentro y hacia afuera en el borde ascendente o descendente de la señal del reloj de datos (fase del reloj), y si el reloj está inactivo cuando está alto o bajo (polaridad del reloj). Los cuatro modos combinan polaridad y fase según esta tabla:
{| class="wikitable col2cen col3cen col4cen col5cen"
|+Modos de operacion de SPI
|-
! Mode
! Clock Polarity
! Clock Phase
! Output Edge
! Data Capture
|-
| SPI_MODE0
| 0
| 0
| Falling
| Rising
|-
| SPI_MODE1
| 0
| 1
| Rising
| Falling
|-
| SPI_MODE2
| 1
| 0
| Rising
| Falling
|-
| SPI_MODE3
| 1
| 1
| Falling
| Rising
|}
<pre>
setDataMode (SPI_MODE0);
</pre>
Una vez que tenga sus parámetros SPI, use SPI.beginTransaction() para comenzar a usar el puerto SPI. El puerto SPI se configurará con todos sus parámetros. La forma más simple y eficiente de usar SPISettings es hacerlo dentro de SPI.beginTransaction(). Por ejemplo:
<pre>
SPI.beginTransaction(SPISettings (14000000, MSBFIRST, SPI_MODE0));
</pre>
Si otras bibliotecas usan SPI desde interrupciones, se les impedirá acceder a SPI hasta que llame a SPI.endTransaction(). La configuración de SPI se aplica al comienzo de la transacción y SPI.endTransaction() no cambia la configuración de SPI. A menos que usted, o alguna biblioteca, llame a startTransaction() por segunda vez, la configuración se mantiene. Debe intentar minimizar el tiempo entre antes de llamar a SPI.endTransaction(), para obtener la mejor compatibilidad si su programa se usa junto con otras bibliotecas que usan SPI.
Con la mayoría de los dispositivos SPI, después de SPI.beginTransaction (), escribirá el pin de selección esclavo LOW, llamará SPI.transfer() cualquier cantidad de veces para transferir datos, luego poner el pin '''SS''' HIGH, y finalmente llamar a SPI.endTransaction()
== Métodos ==
{| class="wikitable col2cen col3cen col4cen col5cen"
|+Metodos disponibles en libreria SPI
|-
! Método !! Descripción
|-
| SPI.begin() || Inicializa el bus SPI
|-
| SPI.transfer(c) || Envia un byte.
|-
| SPI.attachInterrup() || Activa una interrupcion para recibir datos
|-
| SPI.beginTransaction() || Inicializa el bus SPI usando lo definido en SPISettings
|-
| SPI.endTransaction() || Detiene el bus SPI. Normalmente es llamado después de deseleccionar el chip para permitir a otras librerías usar el bus.
|-
| usingInterrupt() || Si su programa realizará transacciones SPI dentro de una interrupción, llame a esta función para registrar el número o nombre de la interrupción con la biblioteca SPI. Esto permite que SPI.beginTransaction() evite conflictos de uso. Tenga en cuenta que la interrupción especificada en la llamada a usingInterrupt() se deshabilitará en una llamada a beginTransaction() y se volverá a habilitar en endTransaction().
|}
== Comentarios ==
Para escribir código para un dispositivo SPI hay que saber unas pocas cosas.
* Cual es la máxima velocidad del dispositivo? Esto es controlado por el primer parámetro in el SPISetting. Si se usa un chip a 15MHz, use 15000000. Arduino automaticamente usará la mejor velocidad igual o menor que esta.
* Estan los datos desplazados (shifted) en el mayor Most Significant Bit (MSB) o menor Least Significant Bit (LSB)? Esto es controlado por el segundo parámetro del SPISetting, o sea MSBFIRTS o LSBFIRTS. La mayoría de chip SPI usan el MSB.
* Esta el reloj de datos con alto o bajo? ¿Hay muestras en el borde ascendente o descendente de los pulsos de reloj? Este modo es controlado por el tercer parámetro del SPISetting.
== Advertencias ==
Tener en cuenta que el estandar para SPI no existe y su implementación varia levemente entre dispositivos. Hay que leer la hoja de datos de cada uno.
== Ejemplos ==
* [https://www.arduino.cc/en/Tutorial/BarometricPressureSensor Sensor barométrico de presión]
* [https://www.arduino.cc/en/Tutorial/DigitalPotControl Control de potenciómetro digital]
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
* [https://github.com/adafruit Adafruid librarys]
* [https://www.arduino.cc/en/Reference/Wire Wire]
* [https://www.arduino.cc/en/reference/SPI SPI]
* [http://arduino.perut.org/Arduino_19.htm Apuntes Arduino]
* [https://www.luisllamas.es/arduino-spi/ Bus SPI] - Luis Llamas
* [https://aprendiendoarduino.wordpress.com/category/bus-spi/ Bus SPI] - Enrique Crespo
* [http://www.gammon.com.au/spi Bus SPI] - Nick Gammon
[[Category:Librerias]]
myp4bh5yubne2q7n2nhfo6wju8nggg3
SRAM
0
334
3765
3764
2019-05-06T22:21:58Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
La '''Static Random Access Memory''' es volatil y es donde se almacena los registros, las variables locales y datos parciales. Es la zona de memoria donde el boceto crea y manipula las variables cuando se ejecuta. Es la mas rápida y la unica que puede se escrita desde el boceto en ejecución.
Es un recurso escaso que debe gestionarse, especialmente si usamos cadenas de caracteres de forma intensiva. Si un Arduino se queda sin memoria RAM, el boceto compila bien y se cargará en el Arduino sin problema, pero se producirán efectos de respuesta inesperados. En caso que necesites muchas cadenas, una técnica para evitar agotar la memoria '''SRAM''' es guardar en la memoria flash las cadenas que no se modifiquen en tiempo de ejecución, usando PROGMEM osea F().
Es usada para los siguientes propósitos:
;Static Data: Este bloque de memoria es reservado en la RAM para todas las variables globales y estáticas. Para cada variable que es definida se separa el espacio adecuado según el tipo sin importar si se usa o no. Luego Arduino copiara los valores iniciales desde el boceto compilado en la flash.
;Heap: Este bloque es usado para las variables o elementos que asignan memoria dinámicamente. Crece desde el final de la zona de Static Data a medida que la memoria es asignada. Usada por elementos como los objetos y vectores/matrices creados por objetos ([[String]] es un ejemplo de ello) o variables locales.
;Stack: Este bloque es usado por las variables locales y para mantener un registro de las interrupciones y las llamadas a funciones. La pila crece desde la zona más alta de memoria hacia el bloque Heap. Cada interrupción, llamada de una función o llamada de una variable local produce el crecimiento de esta memoria.
La mayor parte de los problemas ocurren cuando los bloques Heap y Stack colisionan. Cuando esto ocurre uno o ambas bloques de memoria se corrompen con resultados impredecibles. En uno casos se produce un “cuelgue” del Arduino o resultados impredescibles.
{{Nota|Luego de compilar el bocetos, desde la versión 1.6 del [[IDE]], Arduino informa sobre el tamaño de la '''SRAM''' que sera ocupado por variables globales, es decir el bloque static data.}}
{|class="wikitable col2cen col3cen col4cen"
|+Memoria en cada Arduino
!Tipo!!Arduino [[UNO]]!!Arduino [[MEGA]]!!Arduino [[MKR1000]]
|-
|[[flash]]||32K||256K||256K
|-
|Flash-bootloader||0.5K||8K||-
|-
|SRAM||2K||8K||32K
|-
|[[EEPROM]]||1K||4K||-
|}
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>memoria</categorytree>
== Referencias ==
* [https://www.luisllamas.es/guardar-variables-entre-reinicios-con-arduino-y-la-memoria-no-volatil-eeprom/ Variables y memoria no volatil] - Luis Llamas
* [https://programarfacil.com/blog/tipos-de-memoria/ Tipos de memoria] - Luis Del Valle
[[Category:memoria]]
eiouie9hhm3276ogcyvcrgh7bseaduz
Serial
0
222
4638
4158
2019-07-04T16:33:38Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
Implementación en forma de objeto utilizada para simplificar el uso del puerto serial (USART) por hardware. Se usa para la comunicación entre la placa Arduino y una computadora u otros dispositivos.
Todas las placas Arduino tienen al menos un puerto serie. En el caso del ATmega328P ([[UNO]], [[NANO]], [[MINI]]), solo tiene uno y se conecta a los pines 0 y 1; mientras que el ATmega2560 ([[MEGA]]) tiene cuatro, y sus pines están demarcados en la placa. Por lo tanto, si requiere usar USB no puede usar los pines 0 y 1 para entrada o salida digital.<br>
Cuando el microcontrolador posee más de un puerto serial por hardware, las respectivas instancias se pueden diferenciar mediante el número al final del nombre. Por ejemplo, el Arduino [[MEGA]] tiene: '''Serial''' (este es el que también va al USB), '''Serial1''', '''Serial2''' y '''Serial3'''; cada una para manipular un puerto distinto.
Esta clase hereda de [[Stream]]; por lo tanto todas sus funciones se pueden utilizar aquí también.
{{Nota|Puede usar el monitor serie integrado del [[IDE]] Arduino para comunicarse con una placa Arduino. Haga clic en el botón del monitor serie en la barra de herramientas y seleccione la misma velocidad en baudios que introdujo en [[Serial.begin()]].}}
{{Nota|El flujo de entrada y salida de esta clase se categorizan como '''byte a byte asincrónico'''.}}
== Metodos ==
{|class="wikitable"
|+Metodos disponibles para Serial
|-
!Método!!Descripción
|-
|[[Serial.begin()]]||Abre el puerto serie, fija su configuración y velocidad de comunicación.
|-
|[[Serial.setTimeout()]]||Cambia el tiempo de espera (de la llegada de nuevos datos).
|-
|[[Serial.getTimeout()]]||Retorna el tiempo de espera actualmente configurado.
|-
|[[Serial.available()]]||Indica el numero de bytes/caracteres disponibles para lectura.
|-
|[[Serial.read()]]||Lee un carácter disponible y lo borra del buffer.
|-
|[[Serial.readBytes()]]||Lee uno o más bytes desde el puerto serie, y los almacena en el buffer/vector/matriz espeficificado.
|-
|[[Serial.readBytesUntil()]]||Similar al anterior, excepto que con la posibilidad de además finalizar con un terminador.
|-
|[[Serial.readString()]]||Convierte el flujo de entrada en un objeto [[String]].
|-
|[[Serial.readStringUntil()]]||Similar al anterior, excepto que con la posibilidad de además finalizar con un terminador.
|-
|[[Serial.peek()]]||Lee un carácter disponible pero queda disponible en el buffer (no borra).
|-
|[[Serial.write()]]||Envia datos binarios al puerto serie.
|-
|[[Serial.availableForWrite()]]||Indica el numero de caracteres que todavía están pendientes de transmitirse.
|-
|[[Serial.print()]]||Imprime una representación textual de un dato.
|-
|[[Serial.println()]]||Imprime una representación textual de un dato junto con un salto de línea; o solo este último.
|-
|[[Serial.flush()]]||Bloquea la ejecución hasta que el buffer de salida se haya vaciado.
|-
|[[Serial.find()]]||Lee datos hasta encontrar una coincidencia con una cadena de caracteres o bytes.
|-
|[[Serial.findUntil()]]||Similar al anterior, excepto que con la posibilidad de además finalizar con una cadena terminadora.
|-
|[[Serial.parseInt()]]||Convierte el flujo de entrada en un valor entero [[int]].
|-
|[[Serial.parseFloat()]]||Convierte el flujo de entrada en un valor punto flotante [[float]].
|-
|[[Serial.end()]]||Desactiva la comunicación y libera los pines Rx y Tx asociados.
|}
== Comentarios ==
* En el [[IDE]] hay una pantalla que se llama el '''Monitor serie''' donde se puede hacer que Arduino escriba cosas (vía [[Serial.print()]] o [[Serial.write()]]), pero también se puede enviar datos hacia Arduino (desde la primera linea) que luego se puede capturar en Arduino con [[Serial.read()]].
* No es muy conocido, pero todas las funciones de escritura y las de lectura a múltiples bytes, en realidad retornan un valor entero: la cantidad real de bytes que fueron escritos o leídos con éxito.
* [[Serial.parseInt()]] y [[Serial.parseFloat()]] opcionalmente pueden recibir un [[char]], este se usará para excluirlo de los caracteres inválidos (que obligan a terminar la conversión), pero sin afectar la conversión. Útil para números separados en milésimas (ej.: "1 000 000"). En [[Serial.parseFloat()]] no se debe ingresar el punto ('''.'''); de lo contrario fallará en reconocer las cifras decimales.
{| class="wikitable"
|+ATmega 328 a 16 MHz
|-
! Comando !! ciclos CPU
|-
| Serial.print("Hola mundo") con buffer libre || 9600 baud = 1816 / 115200 baud = 1904
|-
| Serial.print("Hola mundo") con buffer lleno || 9600 baud = 183021 / 115200 baud = 14941
|-
| Serial.write() con buffer libre || 9600 baud = 154 / 115200 baud = 162
|-
| Serial.write() con buffer lleno || 9600 baud = 16621 / 115200 baud = 1338
|}
== Advertencias ==
* Desde [[IDE]] v1.0 la transmision en serie es asincrona.
* Arduino [[UNO]] y [[MINI]] solo tiene un puerto Serie implementado por hardware en los pines digitales 0 (Rx) y 1 (Tx). No se recomienda usar los pines digitales 0 (Rx) y 1 (Tx) para entrada o salida si requerirás usar el monitor serie.
* Arduino [[MEGA]] y [[DUO]] tiene 4 puertos serie implementados por hardware.
* La comunicación serial en los pines Tx / Rx usa niveles lógicos TTL (5V o 3V3 dependiendo de la placa). No conecte estos pines directamente a un puerto serial RS232; funcionan a +/- 12V y pueden dañar su placa Arduino. Puedes usar el IC MAX3222.
* Si necesitas mas puertos los puedes implementar por software con la librería '''SoftwareSerial.h'''. Posee las mismas funciones antes descritas (también hereda de [[Stream]]).
* Hay un "bug" o fallo con [[Serial.readString()]] y [[Serial.readStringUntil()]]: si el flujo de entrada es constante (tiempo de espera nunca se agota) y se llama a alguna de estas funciones, se corre el riesgo de colgar completamente el programa. La razón se debe a que, conceptualmente, [[String]] es ilimitado en tamaño; pero como la [[SRAM]] no es así, eventualmente el programa llegará a colapsar.
* Si requiere usar USB no puede usar los pines 0 y 1 para entrada o salida digital.
== Vea también ==
* [[SoftwareSerial]]
* [[sprintf()]]
<categorytree mode=all>Serial</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/functions/communication/serial/ Guía de referencia]
* [https://www.luisllamas.es/puerto-serie-avanzado-arduino/ Comunicación avanzada por puerto serie] - Luis Llamas
* [https://www.luisllamas.es/estructuras-puerto-serie-arduino/ Enviar un objeto o estructura por puerto serie] - Luis Llamas
* [https://www.luisllamas.es/arduino-caracteres-control-puerto-serie/ Caracteres de control en puerto serie] - Luis Llamas
* [https://www.luisllamas.es/array-puerto-serie-arduino/ Enviar o recibir una matriz por puerto serie] - Luis Llamas
* [https://www.luisllamas.es/arduino-bytes-puerto-serie/ Enviar o recibir bytes por puerto serie] - Luis Llamas
* [https://aprendiendoarduino.wordpress.com/tag/rs232/ Comunicación serie Arduino] - Enrique Crespo
* [https://naylampmechatronics.com/blog/24_configuracion-del-modulo-bluetooth-hc-05-usa.html Bluetooth HC-05] - Naylamp
* [https://itp.nyu.edu/physcomp/lessons/serial-communication/serial-communication-the-basics/ Serial communication] - ITP Informatica Fisica
* [http://diymakers.es/usando-el-puerto-serie-del-arduino/ Usando el puerto serie del Arduino] - Diy Makers
[[Category:Serial]]
c9x25t873070izx5jm9lxvjnnxfb43z
Serial.available()
0
295
3541
3534
2019-05-06T17:43:52Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripcion ==
Obtiene un número entero con el número de bytes (caracteres) disponibles para leer o capturar desde el puerto serie. Se usa para vigilar si el usuario ingreso datos.
== Sintexis ==
<pre>
Serial.available();
</pre>
== Parametros ==
Nada.
== Retorna ==
La cantidad de bytes/caracteres disponibles para lectura ([[int]]).
== Advertencias ==
El buffer de lectura es de 64K.
== Ejemplo 1 ==
Es este ejemplo al capturar el carácter en [[char]] lo podemos imprimir directamente.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){ //Espera algo en el buffer
char lee = Serial.read(); //Lee el buffer y lo borra
Serial.print(lee); //Imprime el caracter
}
}
</syntaxhighlight>
== Ejemplo 2 ==
Es este ejemplo al capturar el carácter en [[byte]] se imprime el código ASCCI
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte lee = Serial.read();
Serial.write(lee); //Imprime el caracter
Serial.print(" = ");
Serial.println(lee); //Imprime el codigo ASCCI del caracter
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
[[Category:Serial]]
8m9mphxegj5ahcorm6o8ydi19qotxte
Serial.availableForWrite()
0
329
3565
3529
2019-05-06T17:51:09Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Obtiene el número de bytes (caracteres) disponibles para la escritura (pendientes de ser enviados) en el buffer serie sin bloquear la operación de escritura.
== Sintaxis ==
<pre>
Serial.availableForWrite();
Serial1.availableForWrite(); - solo MEGA
Serial2.availableForWrite(); - solo MEGA
Serial3.availableForWrite(); - solo MEGA
</pre>
== Retorna ==
El número de bytes disponibles para escribir ([[int]]).
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
[[Category:Serial]]
jxthw0wz0fti9aifat66b76ezavktt2
Serial.begin()
0
292
4798
4458
2019-07-18T17:09:01Z
Kike GL
2
wikitext
text/x-wiki
Abre el puerto serie y fija la velocidad en baudios para la transmisión de datos en serie. El valor típico de velocidad para comunicarse con una computadora es 9600, aunque otras velocidades pueden ser soportadas: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 o 115200.
{{Nota|No obstante, puede especificar otras velocidad de comunicación a través de los pines 0 (Tx) y 1 (Tx) en [[UNO]], por ejemplo con un componente que requiere una velocidad en baudios particular.}}
El valor predeterminado es 8N1 (8 bits de datos, sin paridad, un bit de parada). Pero con este parámetros se pueden configurar otras opciones.
== Sintaxis ==
<pre>
Serial.begin(velocidad [, configuracion]);
Serial.begin(velocidad, configuracion, Rx, Tx); //ESP8266
</pre>
== Parámetros ==
;velocidad: Debes usar uno de estos valores 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 o 115200.
;configuración: El valor predeterminado es 8N1 (8 bits de datos, sin paridad, un bit de parada). Pero con este parámetros se pueden configurar otras opciones.
{|class="wikitable col1cen col2cen col3cen col4cen"
|+Configuración serie
!Código!!Datos!!Paridad!!Parada
|-
|5N1||5||rowspan=8|Ninguna||rowspan=4|1
|-
|6N1||6
|-
|7N1||7
|-
|8N1||8
|-
|5N2||5||rowspan=4|2
|-
|6N2||6
|-
|7N2||7
|-
|8N2||8
|-
|5E1||5||rowspan=8|Par||rowspan=4|1
|-
|6E1||6
|-
|7E1||7
|-
|8E1||8
|-
|5E2||5||rowspan=4|2
|-
|6E2||6
|-
|7E2||7
|-
|8E2||8
|-
|5O1||5||rowspan=8|Impar||rowspan=4|1
|-
|6O1||6
|-
|7O1||7
|-
|8O1||8
|-
|5O2||5||rowspan=4|2
|-
|6O2||6
|-
|7O2||7
|-
|8O2||8
|}
;Rx:Pin de recepción
;Tx:Pin de transmisión
== Retorno ==
Nada.
== Comentarios ==
Nada.
== Advertencia ==
* Aunque es posible poner la velocidad en 115200 si envías muchos datos se perderán algunos a esta velocidad.
* Cuando se usa la comunicación serie los puertos digital 0 (Rx) y 1 (Tx) no puede usarse al mismo tiempo.
* Para uC a 16 MHz, es posible iniciar una comunicación serial de hasta 2 Mbps (2000000 bps); sin embargo no se recomienda ya que es prácticamente imposible evitar pérdidas a esta velocidad.
== Ejemplo 1 ==
Este ejemplo imprime por consola los numero de 0 a 254 y para.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
for (byte n=0; n<255; n++){
Serial.println(n);
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 2 ==
Al iniciar la comunicación serie es posible comprobar si existe el puerto serie que devolverá una verdadero o falso según el caso. Luego de la comprobacion imprime por consola los caracteres ASCII desde el 33 al 126.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(38400);
while (!Serial){
; //Esperar a que se conecte el puerto serie.
}
for (char n=33; n<127; n++){
Serial.println(n);
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias extrenas ==
[[Category:Serial]]
df4i6usvb48smlrh1vkaiugzcw0stuo
Serial.end()
0
309
3557
3556
2019-05-06T17:48:15Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripcion ==
Desactiva la comunicación serial, permitiendo que los pines RX y TX se usen para entrada y salida general. Para volver a habilitar la comunicación en serie, llame a [[Serial.begin()]].
== Sintaxis ==
<pre>
Serial.end();
</pre>
== Retorna ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
delay(50);
Serial.println("Todo listo para comunicar por puerto serie.");
Serial.println("Ahora lo cerramos...");
Serial.end();
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Serial]]
mi6rgwyihq6c25mu7b6qb3bfferx88x
Serial.find()
0
322
3547
3546
2019-05-06T17:45:32Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Lee datos del buffer serial hasta que se encuentra el caracter o la cadena objetivo de longitud dada; o se agote el tiempo de espera.
== Sintaxis ==
<pre>
Serial.find(caracter);
Serial.find(cadena);
Serial.find(buffer, lon);
</pre>
== Parametros ==
;caracter: caracter a buscar ([[char]]).
;cadena: cadena de caracteres [[string]] a buscar.
;buffer: vector/matriz/secuencia de bytes ([[byte]]*) a buscar.
;lon: la longitud del anterior ([[int]]).
== Retorna ==
Lo que devuelve es un [[bool]]. La función devuelve '''true''' si se encuentra la cadena objetivo, '''false''' si se agota el tiempo de espera sin encontrarla.
== Advertencias ==
* La comparación es binaria; eso quiere decir que, para efectos de cadenas de caracteres, la búsqueda es sensible a las mayúsculas.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte car = Serial.peek(); //Lee carácter enviado y NO borra del buffer.
Serial.write(car); //Imprime siempre lo mismo
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
[[Category:Serial]]
sb2s51ipffe0mcgwjgtiwkorue0u99f
Serial.findUntil()
0
328
3554
3514
2019-05-06T17:47:31Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Lee datos del buffer serial hasta que:
*Se encuentre la cadena objetivo.
*Se encuentre la cadena terminadora.
*Se agote el tiempo de espera.
== Sintaxis ==
<pre>
Serial.findUntil(target, terminal);
Serial.findUntil(bufObj, lonObj, bufTer, lonTer);
</pre>
== Parametros ==
;target: la cadena a buscar ([[string]]).
;terminal: la cadena terminadora ([[string]]).
;bufObj: vector/matriz/secuencia de bytes ([[byte]]*) a buscar.
;lonObj: longitud de la secuencia objetivo ([[int]]).
;bufTer: vector/matriz/secuencia de bytes ([[byte]]*) terminadora.
;lonTer: longitud de la secuencia terminadora ([[int]]).
== Retorna ==
La función devuelve ([[bool]]) '''true''' si se encuentra la cadena de destino; '''false''' si supera el tiempo de espera sin encontrarla, o se encuentra la cadena terminadora primero.
== Advertencias ==
* La comparación es binaria; eso quiere decir que, para efectos de cadenas de caracteres, la búsqueda es sensible a las mayúsculas.
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
[[Category:Serial]]
akdaq99pky1l600ua1viy89ydb4sx07
Serial.flush()
0
324
3553
3523
2019-05-06T17:47:17Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Espera a que se complete la transmisión de los datos salientes.
== Sintaxis ==
<pre>
Serial.flush();
</pre>
== Parametros ==
Nada.
== Retorna ==
Nada.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte car = Serial.peek(); //Lee carácter enviado y NO borra del buffer.
Serial.write(car); //Imprime siempre lo mismo
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
[[Category:Serial]]
mid7neu7bwz48bybs34ux41mhpgagod
Serial.getTimeout()
0
321
3552
3551
2019-05-06T17:47:03Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Retorna el tiempo de espera (en milisegundos) actualmente configurado para el puerto serial.
== Sintaxis ==
<pre>
Serial.getTimeout()
</pre>
== Retorna ==
El tiempo de espera actualmente configurado (en milisegundos como [[unsigned long]]).
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
Serial.print(F("El tiempo de espera actual es de "));
Serial.print(Serial.getTimeout());
Serial.println(F(" ms."));
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
[[Category:Serial]]
ag07jshs7lxfs21y3zp6sgjem3h4qud
Serial.parseFloat()
0
331
5090
5089
2019-10-18T22:41:45Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Busca el siguiente número punto flotante entre los datos entrantes, asumiendo que está codificado como texto y que el separador decimal es un punto ('.'). Se rige bajo las siguientes reglas:
* Los caracteres iniciales que no son dígitos o un signo menos, se saltan.
* El análisis se detiene cuando el tiempo de espera se agota, o se lee un caracter que no es dígito (excluyendo el ignorado y el punto si es el primer encuentro).
* Si no se leyeron dígitos válidos durante el tiempo de espera (vea [[Serial.setTimeout()]]), se devuelve '''0.0'''.
== Sintaxis ==
<pre>
Serial.parseFloat();
Serial.parseFloat(caracter);
</pre>
== Parámetros ==
;caracter: caracter a ignorar una vez iniciado el proceso ([[char]]).
== Retorna ==
Retorna un numero tipo [[float]], o '''0.0''' si no encuentra nada.
== Advertencias ==
* Si de parámetro se introduce el símbolo de menos ('-'), el valor retornado nunca será negativo.
* Si de parámetro se introduce el punto ('.'), la función fallará en reconocer las cifras decimales.
* Este parámetro es muy útil para ignorar coma (',') en números como: 10,000.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
1.23 --> 1.23
a1.23 --> 1.23
1.23a --> 1.23
1a2b3 --> 1.00, 2.00 y 3.00
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
float num = Serial.parseFloat();
Serial.println(num, 2);
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
[[Category:Serial]]
2d6wue3yq2c76h1mfn3o2ei5f9bixn3
Serial.parseInt()
0
330
4517
4516
2019-06-25T21:20:38Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Busca el siguiente número entero entre los datos entrantes, asumiendo que está codificado como texto. Se rige bajo las siguientes reglas:
* Los caracteres iniciales que no son dígitos o un signo menos, se saltan.
* El análisis se detiene cuando el tiempo de espera se agota, o se lee un caracter que no es dígito (excluyendo el ignorado).
* Si no se leyeron dígitos válidos durante el tiempo de espera (vea [[Serial.setTimeout()]]), se devuelve 0.
== Sintaxis ==
<pre>
Serial.parseInt();
Serial.parseInt(caracter);
</pre>
== Parametros ==
;caracter: caracter a ignorar una vez iniciado el proceso ([[char]]).
== Retorna ==
Devuelve un número tipo [[long]], o '''0''' si no encuentra nada.
== Advertencias ==
* Si de parámetro se introduce el símbolo de menos ('-'), el valor retornado nunca será negativo.
* Este parámetro es muy útil para ignorar coma (',') en números como: 10,000.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
123 --> 123
a123 --> 123
123a --> 123
1a2a3 -->1, 2 y 3
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo mete uno a uno los dígitos entre 0~9 en monitor serie.
<syntaxhighlight lang="c++">
byte x;
int y;
void setup(){
Serial.begin(115200);
}
void loop(){
if (Serial.available()){
x = Serial.peek();
y = Serial.parseInt();
Serial.print(x); //ASCII
Serial.print(" = ");
Serial.println(y); //Entero
}
}
</syntaxhighlight>
== Ejemplo 3 ==
Implementacion de un '''buffer circular''' que se usa para almacenar los ultimos n valores recibidos para efectos de hacer un promedio por ejemplo.
<syntaxhighlight lang="c++">
const byte ventana = 5;
int circularBuffer[ventana];
byte indice = 0; //Indice circular
//Mete nuevo "valor" al buffer circular
void meter(int valor){
circularBuffer[indice] = valor;
indice++;
if (indice >= ventana){
indice = 0;
}
}
void setup(){
Serial.begin(115200);
}
void loop(){
if (Serial.available()){
int x = Serial.parseInt();
meter(x);
for (byte n=0; n<ventana; n++){
Serial.print(circularBuffer[n]);
Serial.print(",");
}
Serial.println();
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
* [https://www.luisllamas.es/buffer-circular-arduino/ Buffer circulare en Arduino] - Luis Llamas
[[Category:Serial]]
50okdb8rt23pajl9d6qlzyray5ciwjf
Serial.peek()
0
332
4514
3568
2019-06-25T01:00:11Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Devuelve el siguiente byte (carácter) de los datos en serie entrantes sin eliminarlo del buffer serie interno. Es decir, las llamadas sucesivas a '''Serial.peek()''' devolverán el mismo carácter, al igual que la próxima llamada a [[Serial.read()]].
== Sintaxis ==
<pre>
Serial.peek();
</pre>
== Parametros ==
Nada.
== Retorna ==
El valor recuperado según el número de bits de datos configurado, o -1 si el buffer de entrada está vacío ([[int]]).
== Advertencias ==
* Si por error no se verifica de antemano si hay datos disponibles, '''peek()''' retornará 255 para [[byte]] en el caso que el valor real sea -1 (nada).
== Ejemplo ==
En este ejemplo debes meter caracteres en el monitor serie, pero siempre veras el primero.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
}
void loop(){
if (Serial.available()){
byte car = Serial.peek(); //Lee caracter enviado y NO borra del buffer.
Serial.write(car); //Imprime siempre lo mismo, caracter
Serial.print(" = ");
Serial.println(car); //Imprime siempre lo mismo, código ASCII
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
[[Category:Serial]]
hiodp5m4yj6i8p5tg65jzydhu1zykzy
Serial.print()
0
287
4813
4808
2019-07-19T00:07:02Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Vuelca o envía un dato (variable, número o cadena), al puerto serie; lo hace mediante la representación textual de su valor. Dicho comando puede tomar diferentes formas, dependiendo de los parámetros que usemos para definir el formato de volcado de los datos.
== Sintaxis ==
<pre>
Serial.print("texto a mostrar");
Serial.print(variable [,formato]);
Serial.print(variable [,decimales]);
</pre>
== Parámetros ==
;Variable: variable a evaluar. Esta variable puede ser de cualquier tipo.
;formato: por defecto es DEC, pero puedes también usar [[DEC / BIN / HEX / OCT|HEX, OCT o BIN]].
;digitos: si la variable es tipo [[float]] o [[double]] se puede especificar el numero de decimales.
== Retorna ==
size_t ([[long]]):print() devuelve el número de bytes escritos, aunque leer ese número es opcional.
== Advertencias ==
* Es posible que '''print()''' muestre varios valores al mismo tiempo pero estos deben ser [[suma|concatenados]] en una variable [[String]] previamente. Ver ejemplo 2.
== Comentarios ==
Los literales de caracteres y cadenas también pueden representar caracteres especiales que son difíciles o imposibles de expresar de otra manera en el código fuente de un programa, como "nueva linea" (\n) o "tab" (\t). Estos caracteres especiales son todos precedidos por un carácter de barra diagonal inversa (\).
{| class="wikitable col1cen"
|+Codigos de escape
!Código!!Descripción!!ASCII!!DEC
|-
|\n||nueva línea||LF||10
|-
|\r||retorno de carro||CR||13
|-
|\t||tabulacion horizontal||HT||9
|-
|\v||tabulacion vertical||VT||11
|-
|\b||retroceso||BS||8
|-
|\f||salto de página||FF||12
|-
|\a||alerta (pitido)||BELL||7
|-
|\'||comilla simple||'||39
|-
|\"||comillas dobles||"||34
|-
|\?||signo de interrogación||?||63
|-
|\\||barra invertida||\||47
|}
== Ejemplo 1 ==
Observa que <b>no hay diferencia</b> entre usar [[Serial.write()]] y '''print()''' para un [[char]].
<syntaxhighlight lang="c++">
char c = 'A'; //Serial lo mismo que c = 65
Serial.write(c); //A
Serial.print(c); //A
Serial.print(c, DEC); //65
Serial.print(c, HEX); //41
Serial.print(c, OCT); //101
Serial.print(c, BIN); //01000001
Serial.print('L', DEC) //76
Serial.print(76, HEX) //4C
Serial.print(76, OCT) //114
Serial.print(76, BIN) //01001100
</syntaxhighlight>
== Ejemplo 2 ==
Observa la <b>diferencia sustancial</b> entre usar [[Serial.write()]] y '''print()''' para un [[byte]].
<syntaxhighlight lang="c++">
byte c = 'A'; //Seria lo mismo con c = 65
Serial.write(c); //A
Serial.print(c); //65 ***ojo al piojo***
Serial.print(c, DEC); //65
Serial.print(c, HEX); //41
Serial.print(c, OCT); //101
Serial.print(c, BIN); //1000001
</syntaxhighlight>
== Ejemplo 3 ==
En este ejemplo demostramos que a una cadena se le puede '''concatenar''' un numero sin problemas.
<syntaxhighlight lang="c++">
Serial.print("Sensor: " + analogReda(A0)); //No muestra nada
int sensor = analogRead(A0);
sensor = "Sensor: "+ sensor;
Serial.print(sensor); //Solo sale valor de analogRead(A0)
String sensor = "Sensor: ";
sensor = sensor + analogRead(A0); //También puedes usar sensor.concat(analogRead(A0));
Serial.print(sensor); //Ok
</syntaxhighlight>
== Ejemplo 4 ==
Aquí un ejemplo mas completo para dejar clara la diferencia entre [[Serial.write()]], '''Serial.print()''' y [[Serial.println()]]
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(9600);
Serial.println("*** Estamos listo ***");
}
void loop() {
if (Serial.available()){
byte ent = Serial.read();
Serial.print("El caracter enviado fue: ");
Serial.write(ent);
Serial.print(" y su codigo ASCCI es: ");
Serial.print(ent);
Serial.print(" en HEXADECIMAL es: ");
Serial.print(ent, HEX);
}
}
</syntaxhighlight>
== Ejemplo 5 ==
Puede pasar cadenas almacenadas en memoria [[flash]] a '''Serial.print()''' envolviéndolas con el macro [[F()]].
<syntaxhighlight lang="c++">
Serial.print(F("Apuntes de Arduino"));
</syntaxhighlight>
{{Tip|Esto es muy útil cuando se tiene que enviar gran cantidad de texto que de otro modo usaría mucha [[SRAM]].}}
== Ejemplo 6 ==
Si tienes un [[float]] o un [[double]] puedes especificar el numero de decimales.
<syntaxhighlight lang="c++">
Serial.println(PI, 2); //3.14
Serial.println(PI, 6); //3.141593
</syntaxhighlight>
== Ejemplo 7 ==
Podemos usar la [[Asignación condicional]] dentro de print()
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
for (byte n=2; n<14; n++){
pinMode(n, INPUT);
}
}
void loop(){
for (byte n=2; n<14; n++){
Serial.print(n);
Serial.print(" = ");
Serial.println(digitalRead(n)?"Prendido":"Apagado");
}
Serial.println("---------");
delay(1000);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
* [https://aprendiendoarduino.wordpress.com/tag/comunicacion-serie/ Comunicación serie] - Enrique Crespo
* [https://arduino.stackexchange.com/questions/10088/what-is-the-difference-between-serial-write-and-serial-print-and-when-are-they Difference between serial write and serial print] - Stack Exchange
[[Category:Serial]]
ac9b9lk9s2bl3lxudblcop0h287sixj
Serial.println()
0
288
5085
5084
2019-10-14T22:22:42Z
Kike GL
2
/* Comentarios */
wikitext
text/x-wiki
== Descripcion ==
Vuelca o envía textualmente el valor de una cadena de carateres o variable al puerto serie, seguido de un carácter de retorno de carro "CR" (ASCII 13, o '\r') y un carácter de salto de línea "LF"(ASCII 10, o '\n'). Toma la misma forma que el comando [[Serial.print()]].
== Sintaxis ==
<pre>
Serial.println();
Serial.println("Texto a mostrar");
Serial.println(variable[, formato]);
Serial.println(variable[, decimales]);
</pre>
== Parámetros ==
;variable: variable a evaluar.
;formato: por omision es DEC, pero también puede ser [[DEC / BIN / HEX / OCT|HEX, OCT o BIN]].
;decimales: eliges el numero de decimales a mostrar de una variable tipo [[float]]
También se puede prescindir de parámetros, sería para solamente crear el salto de línea.
== Retorna ==
size_t ([[long]]): '''println()''' devuelve el número de bytes escritos, aunque leer ese número es opcional.
== Comentarios ==
Los literales de caracteres y cadenas también pueden representar caracteres especiales que son difíciles o imposibles de expresar de otra manera en el código fuente de un programa, como "nueva linea" (\n) o "tab" (\t). Estos caracteres especiales son todos precedidos por un carácter de barra diagonal inversa (\).
{| class="wikitable col1cen"
|+Codigos de escape
!Código!!Descripción!!ASCII!!DEC
|-
|\n||nueva línea||LF||10
|-
|\r||retorno de carro||CR||13
|-
|\t||tabulacion horizontal||HT||9
|-
|\v||tabulacion vertical||VT||11
|-
|\b||retroceso||BS||8
|-
|\f||salto de página||FF||12
|-
|\a||alerta (pitido)||BELL||7
|-
|\'||comilla simple||'||39
|-
|\"||comillas dobles||"||34
|-
|\?||signo de interrogación||?||63
|-
|\\||barra invertida||\||47
|}
== Advertencias ==
Nada
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
Serial.println("ArduWiki"); //ArduWiki
Serial.println(digital(13)); //Imprime 0 o 1.
Serial.println(analogRead(A0)); //Imprime entre 0~1024.
float n = 1.23456;
Serial.println(n); //Imprime 1.23456
Serial.println(n, 0); //Imprime 1
Serial.println(n, 2); //Imprime 1.23
Serial.println(n, 4); //Imprime 1.2345
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo demostramos que a una cadena se le puede '''concatenar''' un numero sin problemas.
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
String m = "ASCII: ";
m = m + Serial.read();
Serial.println(m);
}
}
</syntaxhighlight>
== Ejemplo 3 ==
Podemos usar la [[Asignación condicional]] dentro de println()
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
for (byte n=2; n<14; n++){
pinMode(n, INPUT);
}
}
void loop(){
for (byte n=2; n<14; n++){
Serial.print(n);
Serial.print(" = ");
Serial.println(digitalRead(n)?"Prendido":"Apagado");
}
Serial.println("---------");
delay(1000);
}
</syntaxhighlight>
== Vea tambien ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
[[Category:Serial]]
bazx6ayxjf6vzcqs1zh48ztyyow2nfq
Serial.read()
0
294
4940
4939
2019-09-21T15:31:48Z
Kike GL
2
/* Ejemplo 5 */
wikitext
text/x-wiki
== Descripción ==
Lee o captura un byte (un carácter) desde el puerto serie.
{{Nota|Lo que lee es un caracter en codigo ASCII.}}
== Sintaxis ==
<pre>
char variable = Serial.read();
</pre>
== Parametros ==
;variable: variable para capturar [[char]] o [[byte]] de entrada. Cuidado no es lo mismo ver ejemplos 1 y 2.
== Retorno ==
El valor recuperado según el número de bits de datos configurado, o -1 si el buffer de entrada está vacío ([[int]]).
== Advertencia ==
* Si por error no se verifica de antemano si hay datos disponibles, '''read()''' retornará 255 para [[byte]] en el caso que el valor real sea -1 (nada).
* El buffer en el caso de [[UNO]] y [[NANO]] es de 64 kB. Aunque esto se puede cambiar con la libreria '''HardwareSerial.h'''.
* El monitor serie '''nunca''' añade a la cadena escrita CR (\n) ni LF (\n) si haces un simple '''Enter'''. No asi si lo escribes en un block de notas y lo copias en la linea de envio.
== Ejemplo 1 ==
En este primer ejemplo usamos una variable tipo [[char]] para capturar el caracter.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){ //Espera carácter
char car = Serial.read(); //Lee carácter enviado y lo borra del buffer
Serial.println(car); //Imprime carácter enviado
}
}
</syntaxhighlight>
Si envias A se imprime A, si envias 1 se imprime 1.
== Ejemplo 2 ==
En este segundo ejemplo usamos una variable tipo [[byte]] para capturar carácter.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){ //Espera carácter
byte car = Serial.read(); //Lee carácter enviado y lo borra del buffer
Serial.write(car); //Imprime carácter enviado
Serial.print(" = ");
Serial.println(car); //Imprime código ASCII carácter enviado
}
}
</syntaxhighlight>
Si envias A se imprime 65, si envias 1 se imprime 49.
{{Tip|Nota que la única diferencia es que en el ejemplo 1 capturamos como [[char]] y en el segundo ejemplo como [[byte]].}}
== Ejemplo 3 ==
En este ejemplo capturaremos varios caracteres y los almacenamos uno a uno en una variable tipo [[String]].
<syntaxhighlight lang="c++">
String frase = "";
void setup(){
Serial.begin(9600);
}
void loop(){
while (Serial.available()){
char caracter = Serial.read();
frase.concat(caracter);
delay(10);
}
if (frase != ""){
Serial.println(frase);
frase = "";
}
}
</syntaxhighlight>
== Ejemplo 4 ==
Este ejemplo recibe una matriz de [[int]]s.
<syntaxhighlight lang="c++">
int datos[10];
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available() >= 10 * sizeof(datos[0])){
Serial.readBytes((byte*)datos, 10 * sizeof(datos[0]));
}
}
</syntaxhighlight>
== Ejemplo 5 ==
Mucha gente intenta probar este código enviando datos por el monitor serie y no le funciona, porque el '''Enter''' del monitor serie ejecuta la acción de enviar sin introducir los códigos [[ASCII table|ASCII]] CR (\r) ni LF (\n).
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
String data = Serial.readStringUntil('\n');
Serial.println(data);
}
}
</syntaxhighlight>
{{Nota|Para que te funcione este código escribe algo y le das enter (CR) en un Notepad++ por ejemplo y luego copia esa cadena completa y la pegas en el monitor serie y envías.}}
== Ejemplo 6 ==
Si leemos el buffer vacio notamos que la respuesta en -1.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
delay(1000);
Serial.println(Serial.read());
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/functions/communication/serial/print/ Seril.print()] - Referencias Arduino
* [https://aprendiendoarduino.wordpress.com/tag/comunicacion-serie/ Comunicacion serie] - Enrique Crespo
* [https://www.luisllamas.es/cadenas-de-texto-puerto-serie-arduino/ Cadena de texto por puerto serie] - Luis Llamas
* [https://www.luisllamas.es/array-puerto-serie-arduino/ Matriz por puerto serie] - Luis Llamas
* [http://manueldelgadocrespo.blogspot.com/p/serialprint.html Serial.print()] - Manuel Delgado
* [https://hetpro-store.com/TUTORIALES/arduino-serial-print/ Serial print] - HetPRO
* [http://cursoarduinomega.blogspot.com/2015/10/todo-sobre-serialprint.html Serial.print()] - Curso sobre Arduino MEGA
* [https://arduino.stackexchange.com/questions/10088/what-is-the-difference-between-serial-write-and-serial-print-and-when-are-they Difference between Serial.print() and Seria.write()] - Stack Exchange
[[Category:Serial]]
mzny47o6ex0aax8j7hnojbkgovoxc0g
Serial.readBytes()
0
325
4511
4510
2019-06-25T00:33:00Z
Kike GL
2
/* Ejemplo 2 */
wikitext
text/x-wiki
== Descripción ==
Lee caracteres desde el búfer del puerto serie, hacia el especificado. La función termina si la longitud determinada se ha leído, o el tiempo de espera (ver [[Serial.setTimeout()]]) se ha agotado.
== Sintaxis ==
<pre>
Serial.readBytes(buffer, largo);
</pre>
== Parámetros ==
;buffer: el buffer/vector/matriz para almacenar los bytes ([[char]]* o [[byte]]*).
;largo: el número de bytes a leer ([[int]]).
== Retorna ==
Devuelve el número de caracteres colocados en el búfer ([[int]]). Un 0 significa que no se encontró nada durante el tiempo de espera.
== Advertencias ==
* La longitud del buffer debe respetarse, de lo contrario se corre el riesgo de un "desbordamiento de buffer" que puede corromper el contenido la memoria de ejecución ([[SRAM]]).
== Ejemplo 1 ==
Hay que recordar que el puerto serie transmite caracteres ASCII. Asi por ejemplo si enviamos 23 la respuesta sera 50 y 51.
<syntaxhighlight lang="c++">
byte ref[2];
void setup(){
Serial.begin(115200);
}
void loop(){
if (Serial.available() > 2){
Serial.readBytes(ref, 2);
Serial.println(ref[0]);
Serial.println(ref[1]);
}
}
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
if (Serial.available()) {
buffer[Serial.readBytes(buffer, sizeof(buffer) - 1)] = 0; // Colocar el terminador de cadenas de caracteres
Serial.print(F("Mensaje recuperado: \""));
Serial.print(buffer);
Serial.println('\"');
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
[[Category:Serial]]
shqq3jxvnycz0kb42bouqy16e53892h
Serial.readBytesUntil()
0
326
3564
3563
2019-05-06T17:50:49Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Lee caracteres desde el búfer del puerto serie, hacia el especificado. La función termina si la longitud determinada se ha leído, se ha encontrado el caracter terminador (no lo incluye en la lectura pero sí lo descarta del buffer de entrada del puerto), o el tiempo de espera (ver [[Serial.setTimeout()]]) se ha agotado.
== Sintaxis ==
<pre>
Serial.readBytesUntil(caracter, buffer, largo);
</pre>
== Parametros ==
;caracter: el caracter terminador ([[char]]).
;buffer: el buffer/vector/matriz para almacenar los bytes ([[char]]* o [[byte]]*).
;largo: el número de bytes a leer ([[int]]).
== Retorna ==
Devuelve el número de caracteres colocados en el búfer ([[int]]). Un 0 significa que no se encontró nada durante el tiempo de espera o antes del terminador.
== Advertencias ==
* La longitud del buffer debe respetarse, de lo contrario se corre el riesgo de un "desbordamiento de buffer" que puede corromper el contenido la memoria de ejecución ([[SRAM]]).
== Ejemplo ==
<syntaxhighlight lang="c++">
if (Serial.available()) {
buffer[Serial.readBytesUntil('\r', buffer, sizeof(buffer) - 1)] = 0; // Colocar el terminador de cadenas de caracteres
Serial.read(); // Descarta el '\n' que suele venir con el '\r'
Serial.print(F("Linea de texto leida: \""));
Serial.print(buffer);
Serial.println('\"');
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
[[Category:Serial]]
1koajs1hjrp29cyzyrbx66wii3iic5f
Serial.readString()
0
327
3559
3525
2019-05-06T17:49:06Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Lee caracteres y los coloca en un [[String]]. La función finaliza cuando el tiempo de espera (ver [[Serial.setTimeout()]]) se ha agotado.
== Sintaxis ==
<pre>
Serial.readString();
</pre>
== Retorna ==
El objeto [[String]] resultante de la lectura.
== Advertencias ==
* Hay un "bug" o fallo con esta función: si el flujo de entrada es constante (tiempo de espera nunca se agota), se corre el riesgo de colgar completamente el programa. La razón se debe a que, conceptualmente, [[String]] es ilimitado en tamaño; pero como la [[SRAM]] no es así, eventualmente el programa llegará a colapsar.
== Ejemplo 1 ==
Envíe por la consola un mensaje corto. Por ejemplo "Hola mundo"
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()) {
Serial.print("Mensaje recuperado: \"");
Serial.print(Serial.readString());
Serial.println('\"');
}
}
</syntaxhighlight>
== Ejemplo 2 ==
Envíe por la consola un mensaje corto. Por ejemplo "Hola mundo"
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()) {
string texto = Serial.print(Serial.readString();
Serial.println(texto.lenght());
}
}
</syntaxhighlight>
== Ejemplo 3 ==
En este ejemplo debes enviar una frase por la consola por ejemplo "Apuntes de Arduino".
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()) {
String texto = Serial.readString();
Serial.println(texto.length());
}
}</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
[[Category:Serial]]
byrluia51rqnpx4rd98ysm6eou55vmn
Serial.readStringUntil()
0
323
3571
3527
2019-05-06T17:53:56Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Lee caracteres y los coloca en un [[String]]. La función termina si se ha encontrado el caracter terminador (no lo incluye en la lectura pero sí lo descarta del buffer de entrada del puerto), o el tiempo de espera (ver [[Serial.setTimeout()]]) se ha agotado.
== Sintaxis ==
<pre>
Serial.readStringUntil(caracter);
</pre>
== Parametros ==
;caracter: el caracter terminador ([[char]]).
== Retorna ==
El objeto [[String]] resultante de la lectura.
== Comentario ==
Esta función es parte de la clase [[Stream]] y se puede usar cualquier clase que herede de ella ([[Wire]], [[Serial]], etc.).
== Advertencias ==
* Hay un "bug" o fallo con esta función: si el flujo de entrada es constante (tiempo de espera nunca se agota) y nunca se encuentra el caracter terminador, se corre el riesgo de colgar completamente el programa. La razón se debe a que, conceptualmente, [[String]] es ilimitado en tamaño; pero como la [[SRAM]] no es así, eventualmente el programa llegará a colapsar.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
if (Serial.available()) {
Serial.print(F("Linea de texto leida: \""));
Serial.print(Serial.readStringUntil('\r')); // Ojo con el tamaño, que puede que de aquí no pase u ocurra comportamiento indefinido.
Serial.println('\"');
Serial.read(); // Descarta el '\n' que suele venir con el '\r'
}
</syntaxhighlight>
== Ejemplo 2 ==
Es este ejemplo se lee el buffer hasta encontrar el CR+LF.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
}
void loop(){
if (Serial.available()) {
Serial.println(Serial.readStringUntil("\r\n"));
}
}
</syntaxhighlight>
== Ejemplo 3 ==
Es este ejemplo se lee el buffer hasta encontrar el el punto seguido.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
}
void loop(){
if (Serial.available()) {
Serial.println(Serial.readStringUntil(". "));
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
* [http://manueldelgadocrespo.blogspot.com/p/readstringuntil.html readstringuntil()] - Manuel Delgado
[[Category:Serial]]
nv5h16bzde8pwehif6ukgcdwfdmhov1
Serial.setTimeout()
0
320
3549
3548
2019-05-06T17:46:04Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Establece los milisegundos máximos para esperar datos en serie al usar: [[Serial.readBytes()]] o [[Serial.readBytesUntil()]].
{{Nota|Por defecto son 1000 milisegundos (1 segundo).}}
== Sintaxis ==
<pre>
Serial.setTimeout(tiempo);
</pre>
== Parametros ==
;tiempo: tiendo de espera en milisegundos ([[unsigned long]]).
== Retorna ==
Nada.
== Advertencias ==
* No se debe configurar con un valor excesivamente alto o bajo. Si es muy alto, las funciones bloqueantes fuertemente van a entorpecer la ejecución del programa; si es muy bajo, se puede interrumpir la operación antes de tiempo cuando se usan tasas de baudios bajas.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
Serial.setTimeout(500);
}
void loop(){
if (Serial.available()){
byte c = Serial.read();
Serial.println(c);
}
}
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
Serial.setTimeout(50);
}
void loop(){
if (Serial.available()) {
byte frase[20];
size_t t = Serial.readBytesUntil('\n', frase, 20);
DEBUG(frase, t)
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
[[Category:Serial]]
1dpzf2oy0aexjmp1lw4usc6i5xrvf6p
Serial.write()
0
293
4814
4809
2019-07-19T00:07:22Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Envia datos binarios ("crudos") al puerto serie. Esta información se envía como un byte o serie de bytes.
== Sintaxis ==
<pre>
Serial.write(val);
Serial.write(str);
Serial.write(buf, len);
</pre>
== Parametros ==
;val: Valor como un solo [[byte]] o variable (el byte menos signficativo en caso de ser más grande).
;str: Cadena como una serie de bytes ([[string]]).
;buf: Matriz enviada como una serie de bytes ([[byte]]*).
;len: Largo de la cadena ([[int]]).
== Retorno ==
La cantidad real de bytes que se enviaron con éxito ([[int]]).
== Advertencia ==
Para enviar los caracteres que representan los dígitos de un número, use la función [[Serial.print()]] en su lugar.
== Comentarios ==
* Todos los datos enviados a través del puerto serie se envían como 0 y 1. La diferencia entre '''write()''' y [[Serial.print()|print()]] es cómo lo que se está enviando se '''interpreta'''.
* Otro aspecto a tener en cuenta es que '''write()''' trabaja con byte (8 bits) por eso Serial.write(65); produce lo mismo que Serial.write(321); o Serial.write(577); es decir la letra A que corresponde al ASCII 65 y 321 - 256 = 65. Recuerda 2^8 = 256.
* Es distinto usar Serial.write("65"); Serial.write("321"); y Serial.write("577"); que es exactamente igual a Serial.print(65); Serial.print(321); y Serial.print(577);.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
Serial.write(65); //A
Serial.write("65"); //65
Serial.write("Hola mundo"); //Hola mundo
n = Serial.write("Hola mundo"); //Retorna el largo de cadena
Serial.write(0x48); //H
Serial.write(0x45); //E
Serial.write(0x4C); //L
Serial.write(0x4C); //L
Serial.write(0x4F); //O
</syntaxhighlight>
== Ejemplo 2 ==
Es importante resaltar la diferencia entre usar '''Serial.write()''' vs [[Serial.print()]] o [[Serial.println()]], mira este ejemplo.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
Serial.write(72); //H
Serial.write(79); //O
Serial.write(76); //L
Serial.write(65); //A
Serial.print(72); //72
Serial.print(79); //79
Serial.print(76); //76
Serial.print(65); //65
}
void loop(){
//nada
}
</syntaxhighlight>
== Ejemplo 3 ==
Es importante resaltar la diferencia entre usar '''Serial.write()''' vs [[Serial.print()]] o [[Serial.println()]], mira este ejemplo.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
byte x = 'A';
Serial.write(x); //A
Serial.print(" = ");
Serial.println(x); //65 código ASCII de A
}
void loop(){
//nada
}
</syntaxhighlight>
== Ejemplo 4 ==
Enviar una serie de [[byte]]s por puerto serie.
<syntaxhighlight lang="c++">
const byte datos[] = {0,1,2,3,5,7,11,13};
const size_t largo = sizeof(datos)/sizeof(datos[0]);
void setup(){
Serial.begin(115200);
Serial.write(datos, largo);
}
void loop(){
//nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
* [https://aprendiendoarduino.wordpress.com/tag/comunicacion-serie/ Comunicación serie] - Enrique Crespo
* [https://arduino.stackexchange.com/questions/10088/what-is-the-difference-between-serial-write-and-serial-print-and-when-are-they Difference between serial write and serial print] - Stack Exchange
[[Category:Serial]]
1yayjs7lgnvj6lh8xqfkuubucqcjnup
Serial call response
0
238
3748
1008
2019-05-06T22:13:28Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Comunicaciones</categorytree>
== Referencias ==
[[Category:Comunicaciones]]
d8atefw72kf74bl7caf89mtyl0c79fx
Serial call response ASCII
0
239
3749
1009
2019-05-06T22:13:49Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Comunicaciones</categorytree>
== Referencias ==
[[Category:Comunicaciones]]
d8atefw72kf74bl7caf89mtyl0c79fx
Serial event
0
240
3750
1010
2019-05-06T22:14:08Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Comunicaciones</categorytree>
== Referencias ==
[[Category:Comunicaciones]]
d8atefw72kf74bl7caf89mtyl0c79fx
Serial passthrough
0
241
3751
1011
2019-05-06T22:14:29Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Comunicaciones</categorytree>
== Referencias ==
[[Category:Comunicaciones]]
d8atefw72kf74bl7caf89mtyl0c79fx
SevenSegment
0
423
3292
3291
2019-05-04T23:17:32Z
Kike GL
2
/* Sintaxis */
wikitext
text/x-wiki
== Descripción ==
La librería [https://github.com/dgduncan/SevenSegment SevSeg] de Dean Reading desde el gestor de librerias del [[IDE]].
Admite pantallas de cátodo y ánodo comun y el uso de transistores de conmutación. Se pueden usar pantallas con cualquier número de dígitos y admiten decimales.
{{Nota|Debes poner una resistencia limitadora de corriente en cada segmento. Tipicamente 330 ohms. Elija RESISTORS_ON_SEGMENTS en 1 para un brillo óptimo.}}
== Placas aplicables ==
== Sintaxis ==
<pre>
#include <SevSeg.h>
SevSeg display;
display.begin(modo, numDigits, digitPins, segmentPins);
</pre>
== Parámetros ==
;modo:COMMON_CATHODE, COMMON_ANODE, N_TRANSISTORS, P_TRANSISTORS, NP_COMMMON_CATHODE, NP_COMMMON_ANODE.
;numDigits:Numero de digitos
;digitPins:Pines de los digitos
;segmentPins:PInes de los segmentos
{| class="wikitable"
|+Configuracion hardware
|-
! Texto de encabezado !! Texto de encabezado
|-
| COMMON_CATHODE || Para display de baja potencia de catodo comun sin interruptores.
|-
| COMMON_ANODE || Para display de baja potencia de anodo comun sin interruptores.
|-
| N_TRANSISTORES || Para display de alta potencia con transitor NPN.
|-
| P_TRANSISTORES || Para display de alta potencia con transitor PNP.
|-
| NP_COMMMON_CATHODE || Para display de alta potencia de tipo catodo comun.
|-
| NP_COMMMON_ANODE || Para display de alta potencia de tipo anodo comun.
|}
== Métodos ==
{| class="wikitable"
|+Metodos libreria SevSeg.h
|-
! Método !! Descripción
|-
| display.begin() || Inicia seven segment
|-
| display.setBrightness(valor) || Brillo entre 0~100
|-
| display.setNumber(num, dec) || Muestra '''num''' con '''dec''' decimales.
|-
| display.refreshDisplay() || Se debe mostrar repetidamente.
|}
== Comentarios ==
== Advertencias ==
Cuidado hay una librería con el mismo nombre: [https://github.com/sparkfun/SevSeg/ SevSeg] de Sparkfun. No esta en el gestor de librerias.
== Ejemplo 1 ==
Usar 4 display de baja potencia de cátodo común.
<syntaxhighlight lang="c++">
#include <SevSeg.h>
SevSeg display; //Crea una instancia de un objeto de siete segmentos
void setup() {
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5}; //Catodos
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; //Anodos
display.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins);
display.setBrightness(90); //Brillo 0~100
display.setNumber(3141,3); //Muestra '3.141'
}
void loop(){
display.refreshDisplay(); //Para mostrar numero
//delay(5); //Si descomentas esto veras un parpadeo
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
* [https://playground.arduino.cc/Main/SevenSegmentLibrary/ SevSeg library]
* [https://playground.arduino.cc/Main/SevenSegmentLibrary/ Seven Segment Library]
[[Category:Librerias]]
4gj4650suxcjnbmoqxit86jexv6o7ct
Smoothing
0
229
3713
996
2019-05-06T21:56:42Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Analogico</categorytree>
== Referencias ==
[[Category:Analogico]]
2i9mmc2o0iyv8al1yd55kjmy3kjkj6x
SoftwareSerial
0
416
4633
4343
2019-07-04T16:27:04Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
La librería [https://github.com/PaulStoffregen/SoftwareSerial SoftwareSerial.h] de Paul Stoffregen no esta en el Administrador de librerias del IDE.
El hardware Arduino tiene soporte incorporado (via un chip UART) para la comunicación en serie en los pines 0 y 1, pero estos pines también van al conector USB por donde se cargan los [[boceto]]s por lo que es delicado usarlos. El búfer en serie de 64 bytes.
Esta libreria permitir la comunicación en serie por otros pines digitales del Arduino, usando un software para replicar la misma funcionalidad. Es posible tener múltiples puertos serie de software con velocidades de hasta 115200 bps. Un parámetro habilita la señalización invertida para dispositivos que requieren ese protocolo.
== Placas aplicables ==
[[UNO]], [[NANO]]...
== Sintaxis ==
<pre>
#include <SoftwareSerial.h>
SoftwareSerial nombreT(2,3); //Rx,Tx
</pre>
== Parámetros ==
;nombre:Nombre que le asignaras al nuevo puerto serie.
;Rx:Pin digtal para Recibir datos
;Tx:Pin digtal para Transmitar datos
== Métodos ==
{| class="wikitable"
|+Metodos disponible con SoftwareSerial.h
|-
! Método !! Descripción
|-
| [[Serial.begin()|begin()]] || Abre el puerto serie, fija su configuración y velocidad de comunicación.
|-
| [[Serial.available()|available()]] || Indica el numero de bytes/caracteres disponibles para lectura.
|-
| [[Serial.read()|read()]] || Lee un carácter disponible y lo borra del buffer.
|-
| [[Serial.peek()|peek()]] || Lee un carácter disponible pero queda disponible en el buffer (no borra).
|-
| [[Serial.write()|write()]] || Envia datos binarios al puerto serie.
|-
| [[Serial.flush()|flush()]] || Espera a que la transmisión de datos de salida serie termine.
|-
| [[Serial.print()|print()]] || Imprime una representación textual de un dato.
|-
| [[Serial.println()|println()]] || Imprime una representación textual de un dato junto con un salto de línea; o solo este último.
|-
| [[Serial.overflow()|overflow()]] || Pruebas para ver si se ha producido un desbordamiento de búfer serie de software. Al llamar a esta función, se borra el indicador de desbordamiento, lo que significa que las llamadas posteriores devolverán el valor falso a menos que se haya recibido y descartado otro byte de datos mientras tanto. El búfer serial del software puede contener 64 bytes.
|-
| listen() || Habilita el puerto serie del software seleccionado para escuchar. Solo un puerto serie de software puede escuchar a la vez; Los datos que lleguen a otros puertos serán descartados. Cualquier dato ya recibido se descarta durante la llamada a listen() (a menos que la instancia dada ya esté escuchando). Devuelve un [[bool]]
|-
| isListening() || Pruebas para ver si el puerto serie del software solicitado está escuchando activamente. Devuelve un [[bool]]
|-
| [[Serial.end()|end()]] || Desactiva la comunicacion. Para reactivar usar begin() nuevamente.
|}
{{Tip|Tenga en cuenta que sólo una instancia '''SoftwareSerial''' puede recibir datos entrantes a la vez (seleccione uno de ellos con la función listen()).}}
== Limitaciones ==
La librería tiene las siguientes limitaciones conocidas:
# Si utiliza varios puertos serie de software, solo uno puede recibir datos a la vez.
# No todos los pines del [[MEGA]] admiten interrupciones, por lo que solo se puede usar lo siguiente para RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 ( 63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
# No todos los pines del [[LEONARDO]] admiten interrupciones, por lo que solo se puede usar lo siguiente para RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
# En Arduino o Genuino 101, la velocidad máxima de RX actual es 57600 bps
# En Arduino o Genuino 101 RX no funciona en Pin 13
{{Nota|Si su proyecto requiere flujos de datos simultáneos, consulte la biblioteca [https://github.com/PaulStoffregen/AltSoftSerial AltSoftSerial] de Paul Stoffregen, que supera una serie de problemas con el SoftwareSerial, pero tiene sus propias limitaciones.}}
== Advertencias ==
* Siempre prefiera el '''hardware serial''' tiene mucho mejor rendimiento. Arduino [[MEGA]] tiene 3 disponibles.
* AltSoftSerial puede transmitir y recibir simultanemanete. Consume un temporizador de 16 bits, deshabilita algunos pines PWM.
* SoftwareSerial puede tener varias instancias en casi cualquier pin, pero solo 1 puede estar activo a la vez. Tampoco se puede transmitir y recibir al mismo tiempo
== Ejemplo 1 ==
En este ejemplo lo que se reciba por un puesto serie se envía por el otro.
<syntaxhighlight lang="c++">
#include <SoftwareSerial.h>
SoftwareSerial miSerial(10, 11); //Rx, Tx
void setup() {
Serial.begin(57600);
miSerial.begin(4800);
}
void loop() {
if (miSerial.available()) {
Serial.write(miSerial.read());
}
if (Serial.available()) {
miSerial.write(Serial.read());
}
}
</syntaxhighlight>
== Ejemplo 2 ==
Aqui un ejemplo de implementacion de bluetooth.
<syntaxhighlight lang="c++">
#include <SoftwareSerial.h>
SoftwareSerial BT(2,3); //RX,TX
void setup() {
Serial.begin(115200);
//pinMode(4, OUTPUT); //Pin Vcc del HC-05 (On/Off)
//pinMode(5, OUTPUT); //Pin KEY del HC-05 (HIGH = AT)
//digitalWrite(5, HIGH);
//delay(500);
//digitalWrite(4, HIGH);
BT.begin(9600);
Serial.println("Mete comandos AT: ");
}
void loop() {
if (BT.available()){
Serial.write(BT.read());
}
if (Serial.available()){
String cadena = "";
char c = Serial.read(); ;
while (c != '\n'){
cadena += c ;
delay(25) ;
c = Serial.read();
}
cadena += c ;
BT.print(cadena);
Serial.println("---> " + cadena);
}
}
</syntaxhighlight>
== Ejemplo 3 ==
Otro ejemplo con el bluetooth.
<syntaxhighlight lang="c++">
#include <SoftwareSerial.h>
SoftwareSerial BT(2,3); //RX,TX
void setup() {
Serial.begin(115200);
BT.begin(57600);
}
void loop() {
if (BT.available()){
char c = BT.read();
switch (c){
case "A":
digitalWrite(10, HIGH);
Serial.println("Prende 10");
break;
case "a":
digitalWrite(10, LOW);
Serial.println("Apaga 10");
break;
case "B":
digitalWrite(11, HIGH);
Serial.println("Prende 11");
break;
case "b":
digitalWrite(11, LOW);
Serial.println("Apaga 11");
break;
}
}
if (Serial.available()){
String cadena = "";
char c = Serial.read(); ;
while (c != '\n'){
cadena += c ;
delay(25) ;
c = Serial.read();
}
cadena += c ;
BT.print(cadena);
Serial.println("---> " + cadena);
}
}
</syntaxhighlight>
== Ejemplo 4 ==
Comunicar 2 Arduino UNO por bluetooth. El Maestro tiene un pulsador en pin 9 y cuando se pulse se debe conmutar el LED incorporado en el esclavo. Recuerda que ambos deben usar la misma velocidad (AT+BAUD4) y contraseña (AT+PIN123).
Maestro:
<syntaxhighlight lang="c++">
#include <SoftwareSerial.h>
#include <Bounce2.h>
SoftwareSerial BT(2,3); //RX,TX
Bounce rebote = Bounce();
void setup(){
BT.begin(9600);
pinMode(9, INPUT_PULLUP);
rebote.attach(9);
rebote.interval(5);
}
void loop(){
rebote.update();
if (rebote.fell()){
BT.print("1");
}
}
</syntaxhighlight>
Esclavo:
<syntaxhighlight lang="c++">
#include <SoftwareSerial.h>
SoftwareSerial BT(2,3); //RX,TX
void setup(){
BT.begin(9600);
pinMode(13, OUTPUT);
}
void loop(){
if (BT.available()){
char x = BT.read();
if (x 1){
digitalWrite(13, !digitalRead(13));
}
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
* [https://www.arduino.cc/en/Reference/SoftwareSerial SoftwareSerial]
* [https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html AltSoftSerial] de Paul Stoffregen
* [http://manueldelgadocrespo.blogspot.com/p/biblioteca.html Software Serial] - Manuel Delgado
* [https://aprendiendoarduino.wordpress.com/tag/hc-05/ HC-05] - Enrique Crespo
* [https://naylampmechatronics.com/blog/24_configuracion-del-modulo-bluetooth-hc-05-usa.html HC-05] - Naylamp
* [http://www.prometec.net/bt-hc06/ HC-06] - Prometec
* [http://www.prometec.net/bt-hc05/ HC-05] - Prometec
* [http://www.prometec.net/bluetooth-le/ BLE] - Prometec
* [http://www.prometec.net/pc-bt/ PC BT] - Prometec
* [http://www.prometec.net/android-bt/ Android BT] - Prometec
* [http://diymakers.es/arduino-bluetooth/ Arduino Bluetooth] - DiyMarkers
[[Category:Librerias]]
hx75gav18gwnnx7deu73kyq9wikh5m5
State change detection
0
156
4674
4673
2019-07-07T01:06:30Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
== Código ==
<pre>
</pre>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Ejemplo Digital</categorytree>
== Referencias externas ==
[[Category:Ejemplo Digital]]
1v9i19jgpctozhitw3eglayaj8aj8i9
Stream
0
297
3638
3637
2019-05-06T18:22:49Z
Kike GL
2
/* Referencia */
wikitext
text/x-wiki
== Descripción ==
'''Stream''' es la clase base para las secuencias (flujos) de entrada, basadas en caracteres y binarios. No se llama directamente, sino que se invoca cada vez que usa un método (función) que depende de él.
Al heredar también de [[Print]], además adquiere la capacidad de ser la base para flujos que a la vez son de salida (bidireccionales).
'''Stream''' define las funciones de lectura en Arduino. Al usar cualquier funcionalidad principal que use un [[Serial.read()]] método similar, puede asumir de manera segura que llama a la clase '''Stream'''. Para funciones como [[Serial.print()]], '''Stream''' hereda de la clase '''Print'''.
{{Nota|Cuando se crea una clase que requiera de las siguientes funciones (métodos), estas '''DEBEN''' ser implementadas explícitamente: '''read()''', '''peek()''', '''available()''', '''write()''' de un único byte y '''flush()'''. '''availableForWrite()''' es opcional, sin embargo debería implementarse si el flujo de salida es asincrónico (no bloqueante) y byte a byte; no así para transferencias por bloques (ej.: para memorias de almacenamiento masivo como las tarjetas [[SD]]).}}
== Sintaxis ==
<pre>
Stream objeto;
</pre>
== Parámetros ==
;objeto: nombre del objeto instancias de la clase '''Stream'''.
== Retorna ==
Nada.
== Métodos ==
{{Nota|'''Stream''' es una clase "abstracta" o "virtual"; a pesar de que no se le pueda referir directamente por su nombre, así se denotará en la siguiente tabla con el propósito de diferenciarse de las subclases.}}
{|class="wikitable"
|+Métodos de clase Stream
!Método!!Descripción
|-
|[[Stream.setTimeout()]]||Cambia el tiempo de espera (de la llegada de nuevos datos). Por defecto es 1 segundo.
|-
|[[Stream.getTimeout()]]||Retorna el tiempo de espera actualmente configurado.
|-
|[[Stream.available()]]||Indica el número de bytes/caracteres disponibles para lectura.
|-
|[[Stream.read()]]||Lee un carácter/byte disponible.
|-
|[[Stream.readBytes()]]||Lee uno o más bytes, y los almacena en el buffer/vector/matriz espeficificado.
|-
|[[Stream.readBytesUntil()]]||Similar al anterior, excepto que con la posibilidad de además finalizar con un terminador.
|-
|[[Stream.readString()]]||Convierte el flujo de entrada en un objeto [[String]].
|-
|[[Stream.readStringUntil()]]||Similar al anterior, excepto que con la posibilidad de además finalizar con un terminador.
|-
|[[Stream.peek()]]||Lee un carácter disponible, pero no lo descarta del flujo y/o no lo hace "avanzar".
|-
|[[Stream.write()]]*||Envia datos binarios al flujo de salida.
|-
|[[Stream.availableForWrite()]]*||Indica el número de bytes que todavía están pendientes de enviarse (no aplica para flujos sincrónicos o por bloques).
|-
|[[Stream.print()]]*||Imprime (envía), al flujo de salida, una representación textual de un dato.
|-
|[[Stream.println()]]*||Imprime (envía), al flujo de salida, una representación textual de un dato junto con un salto de línea; o solo este último.
|-
|[[Stream.flush()]]*||Espera a que todos los bytes se hayan enviado (para flujos byte a byte asincrónicos), o fuerza el envío de estos (para flujos por bloques).
|-
|[[Stream.find()]]||Lee datos hasta encontrar una coincidencia con una cadena de caracteres o bytes.
|-
|[[Stream.findUntil()]]||Similar al anterior, excepto que con la posibilidad de además finalizar con una cadena terminadora.
|-
|[[Stream.parseInt()]]||Convierte el flujo de entrada en un valor entero, asumiendo codificación textual.
|-
|[[Stream.parseFloat()]]||Convierte el flujo de entrada en un valor punto flotante, asumiendo codificación textual.
|}
{{Nota|los métodos marcados con '''*''' son los que se heredan de [[Print]].}}
== Advertencias ==
* Para usar un método debe reemplazar la palabra '''Stream''' por el nombre del objeto instanciado.
== Comentarios ==
Esta clase esta presente en las siguientes librerías:
* [[Serial]]
* [[Wire]]
* [[Ethernet]]
* [[SD]]
{{Nota|A pesar de estas funciones existen en varias implementaciones (ej.: [[Serial]]), su función real puede variar según el contexto de la subclase. Aquí se explicarán de manera generalizada.}}{{Nota|Se entiende por '''flujo sincrónico''' por aquel que no posee buffer y bloquea la ejecución del programa cada vez que se intenta operar sobre este; su opuesto, el '''flujo asincrónico''', sí tiene buffer y no bloquea. Se entiende por '''flujo byte a byte''' o '''flujo de caracteres''' a aquel donde los bytes son recibidos/enviados inmediatamente; mientras que el '''flujo por bloques''' necesariamente debe tener un buffer llamado "caché", y los datos son enviados/recibidos únicamente bajo demanda.}}
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencia ==
[[Category:Stream]]
2lk9j5c8rp8zsysmp2h622e5318p43a
Stream.available()
0
299
3539
3538
2019-05-06T17:42:51Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Obtiene el número de bytes disponibles para leer en el flujo de entrada.
== Sintaxis ==
<pre>
objetoStream.available();
</pre>
== Parámetros ==
Nada.
== Retorno ==
La cantidad de bytes/caracteres disponibles para lectura ([[int]]).
== Advertencias ==
* Cualquier clase que herede de [[Stream]], debe implementar obligatoria y explícitamente esta función. Debe hacerse de manera que cumpla lo descrito en la sección de '''Descripción''' y '''Retorno'''.
== Ejemplo ==
<syntaxhighlight lang="c++">
void loop(){
if (Serial.available()){
byte lee = Serial.read();
Serial.write(lee); //Imprime el caracter
Serial.print(lee, DEC); //Imprime el codigo ASCCI del caracter
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
ragejyxf9y3yhu9qpdkcgtp1w9r69n9
Stream.availableForWrite()
0
361
3664
3663
2019-05-06T18:31:16Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Obtiene el número de bytes (caracteres) disponibles para la escritura (pendientes de ser enviados) hacia el flijo de salida, sin bloquear la operación de escritura.
== Sintaxis ==
<pre>
objetoStream.availableForWrite();
</pre>
== Parámetros ==
;objetoStream: Nombre de la instancia de la clase [[Stream]]
== Retorna ==
El número de bytes disponibles para escribir ([[int]]).
== Advertencias ==
* Si la clase manipula un flujo de salida byte a byte asincrónico (con buffer), esta función debe implementarse y además debe hacerlo de manera que cumpla lo descrito en la sección de '''Descripción''' y '''Retorno'''. Para flujos por bloques, es opcional; pero si se hace, se recomienda que retorne '''0''' si el bloque en caché no necesita transmitirse (solo lectura), o que retorne el tamaño de dicho bloque (en bytes) en el caso contrario. '''No se debe implementar en flujos de salida byte a byte sincrónicos (sin buffer)''''.
== Ejemplo ==
<syntaxhighlight lang="c++">
Serial.write(buffer, 64); // En cierto grado, 64 bytes a la vez es bastante
int pendientes = Serial.availableForWrite(); // Si el flujo de salida es lo suficientemente lento, se podrá capturar un valor mayor que cero
Serial.flush(); // Esperar a que los datos pendientes se hayan enviado, para así imprimir al final el valor capturado
Serial.println(pendientes);
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
3wd679ju6p5ekpzgcikrtq2xl64dpg0
Stream.find()
0
302
3601
3600
2019-05-06T18:06:13Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Lee datos del flujo de entrada hasta que se encuentra el caracter o la cadena objetivo de longitud dada; o se agote el tiempo de espera.
== Sintaxis ==
<pre>
objetoStream.find(caracter);
objetoStream.find(cadena);
objetoStream.find(buffer, lon);
</pre>
== Parametros ==
;objetoStream: nombre de la instancia de la clase [[Stream]]
;caracter: caracter a buscar ([[char]]).
;cadena: cadena de caracteres [[string]] a buscar.
;buffer: vector/matriz/secuencia de bytes ([[byte]]*) a buscar.
;lon: la longitud del anterior ([[int]]).
== Retorna ==
Lo que devuelve es un [[bool]]. La función devuelve '''true''' si se encuentra la cadena objetivo, '''false''' si se agota el tiempo de espera sin encontrarla.
== Advertencias ==
* La comparación es binaria; eso quiere decir que, para efectos de cadenas de caracteres, la búsqueda es sensible a las mayúsculas.
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
otdvik2vj2xmjobgt53gjt5khveo5ss
Stream.findUntil()
0
303
3650
3649
2019-05-06T18:27:19Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Lee datos del flujo de entrada hasta que:
*Se encuentre la cadena objetivo.
*Se encuentre la cadena terminadora.
*Se agote el tiempo de espera.
== Sintaxis ==
<pre>
objetoStream.findUntil(target, terminal);
objetoStream.findUntil(bufObj, lonObj, bufTer, lonTer);
</pre>
== Parametros ==
;target: la cadena a buscar ([[string]]).
;terminal: la cadena terminadora ([[string]]).
;bufObj: vector/matriz/secuencia de bytes ([[byte]]*) a buscar.
;lonObj: longitud de la secuencia objetivo ([[int]]).
;bufTer: vector/matriz/secuencia de bytes ([[byte]]*) terminadora.
;lonTer: longitud de la secuencia terminadora ([[int]]).
== Retorna ==
La función devuelve ([[bool]]) '''true''' si se encuentra la cadena de destino; '''false''' si supera el tiempo de espera sin encontrarla, o se encuentra la cadena terminadora primero.
== Advertencias ==
* La comparación es binaria; eso quiere decir que, para efectos de cadenas de caracteres, la búsqueda es sensible a las mayúsculas.
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
o4qh819fp6jrk37gh5beaz8vzl07875
Stream.flush()
0
301
3573
3572
2019-05-06T17:54:40Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Su efecto varía según el tipo de flujo de salida:
;Byte a byte sincrónico (sin buffer): no hace nada.
;Byte a byte asincrónico (con buffer): bloquea la ejecución hasta que todos los datos pendientes hayan sido enviados.
;Por bloques: fuerza el envío del bloque en caché, a menos que no se haya modificado de antemano (con respecto al mismo bloque en la fuente de datos).
;Sin implementar/no soportado: no hace nada.
== Sintaxis ==
<pre>
objeto.flush();
</pre>
== Parámetros ==
;objeto: nombre de la instancia de la clase [[Stream]].
== Retorna ==
Boleano.
== Advertencias ==
* Cualquier clase que herede de [[Stream]], debe implementar obligatoria y explícitamente esta función. Debe hacerse de manera que cumpla lo descrito en la sección de '''Descripción'''. Debe implementarse de acuerdo al tipo de flujo de salida que maneja.
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Reference/StreamFlush Guia de referencia Arduino]
[[Category:Stream]]
e6sljb1j39bhdai9b5i2n9su3hcg26j
Stream.getTimeout()
0
312
3646
3645
2019-05-06T18:26:09Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Retorna el tiempo de espera (en milisegundos) actualmente configurado para el flujo de entrada.
== Sintaxis ==
<pre>
objetoStream.getTimeout()
</pre>
== Parametros ==
Nada.
== Retorna ==
El tiempo de espera actualmente configurado (en milisegundos como [[unsigned long]]).
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
Serial.print(F("El tiempo de espera actual es de "));
Serial.print(Serial.getTimeout());
Serial.println(F(" ms."));
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
6et3a2c0xswb8edn5b65oi9pfhp7aay
Stream.parseFloat()
0
319
3662
3661
2019-05-06T18:30:46Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Busca el siguiente número punto flotante entre los datos entrantes, asumiendo que está codificado como texto y que el separador decimal es un punto ('.'). Se rige bajo las siguientes reglas:
* Los caracteres iniciales que no son dígitos o un signo menos, se saltan.
* El análisis se detiene cuando el tiempo de espera se agota, o se lee un caracter que no es dígito (excluyendo el ignorado y el punto si es el primer encuentro).
* Si no se leyeron dígitos válidos durante el tiempo de espera (vea [[Stream.setTimeout()]]), se devuelve '''0.0'''.
== Sintaxis ==
<pre>
objetoStream.parseFloat();
objetoStream.parseFloat(caracter);
</pre>
== Parámetros ==
;caracter: caracter a ignorar una vez iniciado el proceso ([[char]]).
== Retorna ==
Retorna un numero tipo [[float]], o '''0.0''' si no encuentra nada.
== Advertencias ==
* Si de parámetro se introduce el símbolo de menos ('-'), el valor retornado nunca será negativo.
* Si de parámetro se introduce el punto ('.'), la función fallará en reconocer las cifras decimales.
== Ejemplo ==
<syntaxhighlight lang="c++">
Serial.print(F("El doble del número en el archivo es "));
Serial.println(archivo.parseFloat() * 2); // Si todo sale bien, no debería imprimir "0.0" a menos que ese sea realmente el valor recuperado
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
i8xlis58enjmaws5p8uxvpmcr3xkkq2
Stream.parseInt()
0
318
3656
3655
2019-05-06T18:28:50Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Busca el siguiente número entero entre los datos entrantes, asumiendo que está codificado como texto. Se rige bajo las siguientes reglas:
* Los caracteres iniciales que no son dígitos o un signo menos, se saltan.
* El análisis se detiene cuando el tiempo de espera se agota, o se lee un caracter que no es dígito (excluyendo el ignorado).
* Si no se leyeron dígitos válidos durante el tiempo de espera (vea [[Stream.setTimeout()]]), se devuelve 0.
== Sintaxis ==
<pre>
objetoStream.parseInt();
objetoStream.parseInt(caracter);
</pre>
== Parametros ==
;caracter: caracter a ignorar una vez iniciado el proceso ([[char]]).
== Retorna ==
Devuelve un número tipo [[long]], o '''0''' si no encuentra nada.
== Advertencias ==
* Si de parámetro se introduce el símbolo de menos ('-'), el valor retornado nunca será negativo.
== Ejemplo ==
<syntaxhighlight lang="c++">
Serial.print(F("El doble del número en el archivo es "));
Serial.println(archivo.parseInt() * 2); // Si todo sale bien, no debería imprimir cero a menos que ese sea realmente el valor recuperado
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
192e70fayiwia41ec6yboiadoj9fswp
Stream.peek()
0
304
5055
3642
2019-10-07T22:07:32Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Devuelve el siguiente byte (carácter) del flujo de entrada, sin descartar (flujos byte a byte) o avanzar (flujos por bloques). Es decir, las llamadas sucesivas a '''peek()''' devolverán el mismo carácter, al igual que la próxima llamada a [[Stream.read()]].
== Sintaxis ==
<pre>
objetoStream.peek();
</pre>
== Retorno ==
El valor recuperado, o -1 si no hay datos para leer ([[int]]).
== Advertencias ==
* Si por error no se verifica de antemano si hay datos disponibles, '''peek()''' retornará 255 para [[byte]] en el caso que el valor real sea -1 (nada).
* Cualquier clase que herede de [[Stream]], debe implementar obligatoria y explícitamente esta función. Debe hacerse de manera que cumpla lo descrito en la sección de '''Descripción''' y '''Retorno'''.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte car = Serial.peek(); //Lee caracter enviado y NO borra del buffer.
Serial.write(car); //Imprime siempre lo mismo
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias externas ==
[[Category:Stream]]
e9jnnmgxgtlha8q0jl3r9bz5k5gaxrl
Stream.print()
0
315
3644
3643
2019-05-06T18:25:36Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Vuelca o envía un dato (variable, número o cadena), al puerto serie; lo hace mediante la representación textual de su valor. Dicho comando puede tomar diferentes formas, dependiendo de los parámetros que usemos para definir el formato de volcado de los datos.
== Sintaxis ==
<pre>
objetoStream.print("texto a mostrar");
objetoStream.print(variable, formato);
</pre>
== Parametros ==
;variable: variable a evaluar. Esta variable puede ser de cualquier tipo.
;formato: por defecto es '''DEC''', pero puedes también usar '''HEX''', '''OCT''' o '''BIN'''. También puede ser un valor del 0 al 7 si '''variable''' es un punto flotante, representaría la cantidad de cifras decimales a imprimir.
También se pueden utilizar cadenas de caracteres en memoria [[flash]], definidas dentro de [[F()]].
== Retorna ==
La cantidad de caracteres que se llegaron a enviar en el proceso ([[long]]).
== Advertencias ==
Nada.
== Comentarios ==
Los literales de caracteres y cadenas también pueden representar caracteres especiales que son difíciles o imposibles de expresar de otra manera en el código fuente de un programa, como "nueva linea" (\n) o "tab" (\t). Estos caracteres especiales son todos precedidos por un carácter de barra diagonal inversa (\).
{| class="wikitable col1cen"
|+Codigos de escape
!Código!!Descripción
|-
|\n||nueva línea
|-
|\r||retorno de carro
|-
|\t||lengüeta
|-
|\v||pestaña vertical
|-
|\b||retroceso
|-
|\f||alimentación de formulario (alimentación de página)
|-
|\a||alerta (pitido)
|-
|\'||comilla simple ( ')
|-
|\"||comillas dobles ( ")
|-
|\?||signo de interrogación ( ?)
|-
|\\||barra invertida ( \)
|}
== Ejemplo ==
<syntaxhighlight lang="c++">
Serial.print(F("Fecha de compilacion: "));
Serial.println(F(__DATE__));
Serial.print(F("Hora de compilacion: "));
Serial.println(F(__TIME__));
// __DATE__ y __TIME__ son definiciones implícitas en todo boceto de Arduino; son cadenas de caracteres que represetan la fecha y hora de la compilación del código.
// Ya que una definición de cadena equivale a const char*, es aceptado en F() para no consumir RAM.
</syntaxhighlight>
<syntaxhighlight lang="c++">
byte c = 'A'; //Serial lo mismo que c = 65
Serial.write(c); //A ***ojo al piojo***
Serial.print(c); //65
Serial.print(c, DEC); //65
Serial.print(c, HEX); //41
Serial.print(c, OCT); //101
Serial.print(c, BIN); //1000001
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
o0pqxpa34i4krkcce35t5o6ssmoqlmt
Stream.println()
0
363
3602
1918
2019-05-06T18:07:12Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripcion ==
Vuelca o envía textualmente el valor de una cadena de caracteres o variable al [[flujo de salida]], seguido de un carácter de retorno de carro "CR" (ASCII 13, o '\r') y un carácter de salto de línea "LF" (ASCII 10, o '\n'). Toma la misma forma que el comando [[Stream.print()]] (donde se dan más detalles respecto a estas funciones).
En escencia, agrega "\r\n" al final del texto resultante.
== Sintaxis ==
<pre>
objeto.println();
objeto.println("Texto a mostrar");
objeto.println(variable, formato);
objeto.println(variable, decimales);
</pre>
== Parametros ==
;objeto: nombre de la instancia de la clase [[Stream]]
;formato: por omision es '''DEC''', pero también puede ser '''HEX''', '''OCT''' o '''BIN'''.
;decimales: eliges el numero de decimales a mostrar de una variable tipo [[float]]
== Retorna ==
La cantidad de caracteres que se llegaron a enviar en el proceso ([[long]]).
== Comentario ==
También se puede prescindir de parámetros, sería para solamente crear el salto de línea.
== Advertencias ==
Nada.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
}
void loop() {
Serial.println(analogRead(A0)); //Se necesita el salto de línea para que funcione correctamente con el serial plotter
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
g455t8ha83xe3iqlzk2l8x41xrj06ni
Stream.read()
0
300
3640
3639
2019-05-06T18:24:16Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Lee un byte/caracter proveniente del flujo de entrada; y lo "consume" (flujos byte a byte) o provoca avanzar al siguiente (flujos por bloques).
== Sintaxis ==
<pre>
objetoStream.read()
</pre>
== Parametros ==
Nada.
== Retorno ==
El valor recuperado, o -1 si no hay datos para leer ([[int]]).
== Advertencias ==
* Si por error no se verifica de antemano si hay datos disponibles, '''read()''' retornará 255 para [[byte]] en el caso que el valor real sea -1 (nada).
* Cualquier clase que herede de [[Stream]], debe implementar obligatoria y explícitamente esta función. Debe hacerse de manera que cumpla lo descrito en la sección de '''Descripción''' y '''Retorno'''.
== Ejemplo ==
<syntaxhighlight lang="c++">
void loop(){
if (Serial.available()){
byte car = Serial.read(); //Lee caracter enviado y borra del buffer
Serial.write(car); //Imprime caracter enviado
Serial.println(car); //Impime codigo ASCII caracter enviado
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
tn0kc4wsxf7pcjfwzzgwrskaypoixob
Stream.readBytes()
0
298
3654
3653
2019-05-06T18:28:23Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Lee caracteres desde el flujo de entrada, hacia el buffer especificado. La función termina si la longitud determinada se ha leído, o el tiempo de espera (ver [[Stream.setTimeout()]]) se ha agotado.
== Sintaxis ==
<pre>
objetoStream.readBytes(buffer, largo)
</pre>
== Parametros ==
;objetoStream : una instancia de una clase que hereda de Stream.
;buffer: el búfer para almacenar los bytes en [[char]]* o [[byte]]*
;largo: la cantidad máxima de bytes a leer ([[int]])
== Retorno ==
Devuelve el número de caracteres colocados en el búfer ([[int]]). Un 0 significa que no se encontró nada durante el tiempo de espera.
== Advertencias ==
* La longitud del buffer debe respetarse, de lo contrario se corre el riesgo de un "desbordamiento de buffer" que puede corromper el contenido la memoria de ejecución ([[SRAM]]).
== Ejemplo ==
<syntaxhighlight lang="c++">
if (Serial.available()) {
buffer[Serial.readBytes(buffer, sizeof(buffer) - 1)] = 0; // Colocar el terminador de cadenas de caracteres
Serial.print(F("Mensaje recuperado: \""));
Serial.print(buffer);
Serial.println('\"');
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
2w4tosuugaeh79g7milw1pgv5he61ya
Stream.readBytesUntil()
0
314
3660
3659
2019-05-06T18:30:11Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Lee caracteres desde el flujo de entrada, hacia el buffer especificado. La función termina si la longitud determinada se ha leído, se ha encontrado el caracter terminador (no lo incluye en la lectura pero sí lo descarta/ignora del flujo), o el tiempo de espera (ver [[Stream.setTimeout()]]) se ha agotado.
== Sintaxis ==
<pre>
objetoStream.readBytesUntil(caracter, buffer, largo);
</pre>
== Parametros ==
;caracter: el caracter terminador ([[char]]).
;buffer: el buffer/vector/matriz para almacenar los bytes ([[char]]* o [[byte]]*).
;largo: el número de bytes a leer ([[int]]).
== Retorna ==
Devuelve el número de caracteres colocados en el búfer ([[int]]). Un 0 significa que no se encontró nada durante el tiempo de espera o antes del terminador.
== Advertencias ==
* La longitud del buffer debe respetarse, de lo contrario se corre el riesgo de un "desbordamiento de buffer" que puede corromper el contenido la memoria de ejecución ([[SRAM]]).
== Ejemplo ==
<syntaxhighlight lang="c++">
if (Serial.available()) {
buffer[Serial.readBytesUntil('\r', buffer, sizeof(buffer) - 1)] = 0; // Colocar el terminador de cadenas de caracteres
Serial.read(); // Descarta el '\n' que suele venir con el '\r'
Serial.print(F("Linea de texto leida: \""));
Serial.print(buffer);
Serial.println('\"');
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
5gx5sjiwt44geanfg4fv94dfryajpfj
Stream.readString()
0
316
3666
3665
2019-05-06T18:31:47Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Lee caracteres y los coloca en un [[String]]. La función finaliza cuando el tiempo de espera (ver [[Stream.setTimeout()]]) se ha agotado.
== Sintaxis ==
<pre>
objetoStream.readString();
</pre>
== Parámetros ==
;objetoStream: nombre de la instancia de la clase [[Stream]].
== Retorna ==
El objeto [[String]] resultante de la lectura.
== Advertencias ==
* Hay un "bug" o fallo con esta función: si el flujo de entrada es constante (tiempo de espera nunca se agota) o lo suficientemente grande, se corre el riesgo de colgar completamente el programa. La razón se debe a que, conceptualmente, [[String]] es ilimitado en tamaño; pero como la [[SRAM]] no es así, eventualmente el programa llegará a colapsar.
== Ejemplo ==
<syntaxhighlight lang="c++">
if (Serial.available()) {
Serial.print(F("Mensaje recuperado: \""));
Serial.print(Serial.readString()); // Ojo con el tamaño, que puede que de aquí no pase u ocurra comportamiento indefinido.
Serial.println('\"');
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
13ifmauunm75ej039u4xz843qo9ry5i
Stream.readStringUntil()
0
317
3658
3657
2019-05-06T18:29:38Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Lee caracteres y los coloca en un [[String]]. La función termina si se ha encontrado el caracter terminador (no lo incluye en la lectura pero sí lo descarta/ignora del flujo), o el tiempo de espera (ver [[Stream.setTimeout()]]) se ha agotado.
== Sintaxis ==
<pre>
objetoString.readStringUntil(caracter);
</pre>
== Parametros ==
;caracter: el caracter terminador ([[char]]).
== Retorna ==
El objeto [[String]] resultante de la lectura.
== Advertencias ==
* Hay un "bug" o fallo con esta función: si el flujo de entrada es constante (tiempo de espera nunca se agota) o lo suficientemente grande, y nunca se encuentra el caracter terminador; se corre el riesgo de colgar completamente el programa. La razón se debe a que, conceptualmente, [[String]] es ilimitado en tamaño; pero como la [[SRAM]] no es así, eventualmente el programa llegará a colapsar.
== Ejemplo ==
<syntaxhighlight lang="c++">
if (archivo.available()) {
Serial.print(F("Linea de texto leida: \""));
Serial.print(archivo.readStringUntil('\r')); // Ojo con el tamaño, que puede que de aquí no pase u ocurra comportamiento indefinido.
Serial.println('\"');
archivo.read(); // Descarta el '\n' que suele venir con el '\r'
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
5pdbw70k7qffn015obi77p6xu1s7yzt
Stream.setTimeout()
0
311
3652
3651
2019-05-06T18:27:51Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Asigna un tiempo de espera (en milisegundos) de nuevos datos en el flujo de entrada.
'''Para flujos por bloques, esto no debería tener ningún efecto.'''
== Sintaxis ==
<pre>
objetoStream.setTimeout(t);
</pre>
== Parametros ==
;t: el tiempo de espera (en milisegundos) a asignar ([[unsigned long]]).
== Retorna ==
Nada.
== Advertencias ==
* No se debe configurar con un valor excesivamente alto o bajo. Si es muy alto, las funciones bloqueantes fuertemente van a entorpecer la ejecución del programa; si es muy bajo, se puede interrumpir la operación antes de tiempo, dependiendo del ritmo del flujo de entrada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
Serial.setTimeout(500); // Esto quiere decir que a lo sumo va a esperar medio segundo por datos nuevos
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
jhv4c4cqi6k609cwwl4mylwu5rcul62
Stream.write()
0
313
3648
3647
2019-05-06T18:26:40Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Envia datos binarios ("crudos") al flujo de salida. Esta información se envía como un byte o serie de bytes.
== Sintaxis ==
<pre>
objetoStream.write(val);
objetoStream.write(str);
objetoStream.write(buf, len);
</pre>
== Parametros ==
;val: Valor como un solo [[byte]] o variable (el byte menos signficativo en caso de ser más grande).
;str: Cadena como una serie de bytes ([[string]]).
;buf: Matriz enviada como una serie de bytes ([[byte]]*).
;len: Largo de la cadena ([[int]]).
== Retorno ==
La cantidad real de bytes que se enviaron con éxito ([[int]]).
== Advertencias ==
* Para enviar los caracteres que representan los dígitos de un número, use la función [[Stream.print()]] en su lugar.
* Cualquier clase que herede de [[Stream]], debe implementar obligatoria y explícitamente esta función. Debe hacerse de manera que cumpla lo descrito en la sección de '''Descripción''' y '''Retorno'''. En este caso, solo se debe implementar la versión de un sólo byte ('''objetoStream.write(val)'''); y debe retornar '''1''' ([[true / false|true]]) si se pudo transmitir el dato, '''0''' ([[true / false|false]]) en caso contrario. Si la clase no posee o soporta flujos de salida, simplemente debe retornar '''0''' ([[true / false|false]]) para que las operaciones de este tipo no se puedan realizar.
== Ejemplo ==
<syntaxhighlight lang="c++">
while (archivo.available()) {
Serial.write(archivo.read()); // Vuelca el contenido "crudo" o binario del archivo, al puerto serial
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
[[Category:Stream]]
qo8y5lprmcccz2hfx0auhd8wsj5knl1
String
0
70
4503
3690
2019-06-24T23:03:54Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
La clase '''String''' le permite usar y manipular cadenas de texto en formas más complejas que [[string|matriz de caracteres]]. Se requiere más memoria para '''String''' que para una simple matriz de caracteres, pero es mucho mas útil por la cantidad de métodos disponibles y por la administración de memoria automática involucrada.
== Sintaxis ==
<pre>
String objeto = cadena;
String objeto = String(valor);
String objeto = String(valor, base);
String objeto = String(valor, decimales);
</pre>
== Parametros ==
;objeto: nombre de instancia de la clase.
;cadena: cadena asignada entre comillas dobles.
;valor: valor numérico asignado.
;base: base que puede ser DEC, BIN, HEX u OCT.
;decimales: numero de decimales que se usara
== Metodos ==
{| class="wikitable"
|+Métodos de la clase String
!Método!!Descripción
|-
|[[objeto.substring()]]||Extrae una subcadena
|-
|[[objeto.concat()]]||Agrega (adjunta) un dato a la cadena
|-
|[[objeto.charAt()]]||Retorna el caracter ubicado en determinada posición
|-
|[[objeto.compareTo()]]||Realiza una comparación lexicográfica (para efectos de ordenar)
|-
|[[objeto.c_str()]]||Retorna un puntero de [[char]] (a manera de [[string]]) como acceso directo al buffer interno
|-
|[[objeto.equals()]]||Prueba igualdad entre dos cadenas
|-
|[[objeto.equalsIgnoreCase()]]||Igual al anterior, salvo que no distingue mayúsculas
|-
|[[objeto.length()]]||Retorna la longitud de cadena (en cantidad de caracteres)
|-
|[[objeto.trim()]]||Elimina los espacios sobrantes a ambos lados de la cadena
|-
|[[objeto.toLowerCase()]]||Pasa a minúsculas
|-
|[[objeto.toUpperCase()]]||Pasa a mayúsculas
|-
|[[objeto.toCharArray()]]||Copia la cadena de un lugar a otro
|-
|[[objeto.getBytes()]]||Versión [[byte]] del anterior
|-
|[[objeto.replace()]]||Reemplaza una o varias porciones de la cadena.
|-
|[[objeto.remove()]]||Remueve una porción de la cadena
|-
|[[objeto.indexOf()]]||Retorna el índice de la primera coincidencia con un caracter u otra cadena
|-
|[[objeto.lastIndexOf()]]||Retorna el índice de la última coincidencia con un caracter u otra cadena
|-
|[[objeto.startsWith()]]||Verifica si inicia con determinada secuencia (prefijo)
|-
|[[objeto.endsWith()]]||Verifica si termina con determinada secuencia (sufijo)
|-
|[[objeto.setCharAt()]]||Cambia un caracter en la cadena
|-
|[[objeto.toInt()]]||Convierte la cadena en un entero [[long]]
|-
|[[objeto.toFloat()]]||Convierte la cadena en un punto flotante [[float]]
|-
|[[objeto.reserve()]]||Modifica el tamaño del buffer interno
|}
== Comentarios ==
* La clase '''String''' forma parte del núcleo del [[IDE]] a partir de la versión 0019 y es necesario la instancia de la clase, osea crear un objetos, pero las ventajas son: muchos métodos disponibles y administración automática de memoria.
* Las clases String pueden contener caracteres "\0" incrustados, son más rápidas que las [[string|matrices de caracteres]] asignadas en el montón para textos breves y te protegen de los desbordamientos del búfer.
== Advertencias ==
* Tenga en cuenta, que las matrices de caracteres se conocen como [[string]] con s minúscula y las instancias de la '''clase String''' es con S mayúscula.
* Las constantes de cadena especificadas con "comillas dobles" son tratadas como [[string|matrices de caracteres]] y no como la '''clase String'''.
* [[objeto.c_str()]] debe usarse solamente para lectura, y su puntero dejar de usarse cuando el objeto '''String''' asociado sea destruido. De lo contrario ocurriría, respectivamente, corrupción en el objeto en sí o corrupción en la memoria.
* [[objeto.reserve()]] afecta el tamaño del "contenedor", pero no necesariamente lo que retornará [[objeto.length()]] justo después; ya que este último cuenta la longitud real de la cadena y no la de su "contenedor" o "buffer".
* [[objeto.compareTo()]] es sensible a las mayúsculas; para sobrellevar este problema, ambas cadenas tendrían que pasar por [[objeto.toLowerCase()]] o [[objeto.toUpperCase()]] de antemano.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
String x = String(13); //"13"
String x = String(13, DEC); //"13"
String x = String(13, BIN); //"1101"
String x = String(13, HEX); //"D"
String pi = String(31416, 4); //"3.1416"
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
String cadena = "Apuntes de Arduino";
cadena.substring(8,10); //de
cadena.chatAt(1); //p
cadena.length(); //18
cadena.toLowerCase(); //"apuntes de arduino"
cadena.toUpperCase(); //"APUNTES DE ARDUINO"
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tipo dato</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/variables/data-types/stringobject/ Guia de referencia de Arduino]
* [https://www.arduino.cc/reference/es/language/variables/data-types/string/functions/compareto/ Comparador]
* [https://www.arduino.cc/reference/es/language/variables/data-types/string/functions/concat/ Concatenar]
* [http://arduino.cc/en/Reference/StringGetBytes Copiar a un buffer]
* [http://arduino.cc/en/Reference/StringIndexOf Localiza un caracter o string]
* [http://arduino.cc/en/Reference/StringLength Longitud del String]
* [http://arduino.cc/en/Reference/StringStartsWith Comprueba si comienza por una cadena que se pasa como parámetro]
* [http://arduino.cc/en/Reference/StringToCharArray Pasa de String a string]
* [https://www.arduino.cc/reference/es/language/variables/data-types/string/functions/charat/ Accede a un caracter concreto del String]
* [http://arduino.cc/en/Reference/StringReserve Permite asignar un buffer en memoria para manipular strings]
* [https://www.luisllamas.es/convertir-texto-a-numero-arduino/ Convertir texto a numero] - Luis Llamas
* [http://panamahitek.com/tipos-de-datos-en-arduino-la-clase-string/ Tipo de datos: La clase String] - José Villalaz
[[Category:String]]
[[Category:Tipo dato]]
8ngdwczxag4uedd78tb6qo5vktedzxw
String()
0
408
4502
3667
2019-06-24T23:02:04Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Construye una instancia de la clase [[String]]. Existen varias maderas de construir cadenas a partir de diferentes tipos de datos:
* Un solo carácter, en comillas simples tipo [[char]].
* Una cadena de caracteres, entre comillas dobles (es decir, una matriz [[char]])
* Otra instancia del objeto [[String]]
* Un entero constante o un [[long]]
* Un entero constante o [[long]], usando una base especificada [[DEC / BIN / HEX / OCT]].
* Una variable [[int]] o [[long]]
* Una variable [[int]] o [[long]], usando una base especificada [[DEC / BIN / HEX / OCT]].
* Un [[float]] o [[double]], usando un valor decimal especificado.
La construcción de una cadena a partir de un número da como resultado una cadena que contiene la representación [[ASCII table|ASCII]] de ese número. El valor predeterminado es base diez, por lo que te da CR (\r).
== Sintaxis ==
<pre>
String(valor);
String(valor, base);
String(valor, decimales);
</pre>
== Parámetros ==
;valor:una variable para formatear como [[String]], [[string]], [[char]], [[byte]], [[int]], [[unsigned int]], [[long]], [[unsigned long]], [[float]] o [[double]].
;base:la base en la que se formatea un valor integral (opcional)
;decimales:los decimales deseados si va es [[float]] o [[double]]
== Retorno ==
una instancia de la clase [[String]]
== Advertencias ==
== Ejemplo ==
Todas estas declaraciones son verdaderas.
<syntaxhighlight lang="c++">
String cadena = String('a'); //Convertir char en objeto String
String cadena = "Hola Mundo"; //Usando una cadena
String cadena = String("Esta es una cadena"); //Convertir string en objeto String.
String cadena = String(cadena + " otra cadena"); //Concatenando dos cadenas
String cadena = String(13); //Constante
String cadena = String(analogRead(0), DEC); //Usando un int en base decimal
String cadena = String(45, HEX); //Usando int en base hexadecimal
String cadena = String(255, BIN); //Usando int en base binaria
String cadena = String(millis(), DEC); //usando unsigned long en base decimal
String cadena = String(5.698, 3); //Usando float con decimales
</syntaxhighlight>
== Vea también ==
* [[string]]
* [[String]]
== Referencias ==
* [https://www.arduino.cc/en/Reference.StringConstructor Constructor String]
[[Category:String]]
naero8tp5cvm8d17lx72nd8flkishjb
String Replace
0
267
3733
1045
2019-05-06T22:07:09Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Caracteres</categorytree>
== Referencias ==
[[Category:Caracteres]]
eehsp8z2mxqpvgpfn3yplnugvdwkce3
String addition operation
0
260
3725
1038
2019-05-06T22:03:30Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Caracteres</categorytree>
== Referencias ==
[[Category:Caracteres]]
eehsp8z2mxqpvgpfn3yplnugvdwkce3
String append operator
0
261
3726
1039
2019-05-06T22:03:54Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Caracteres</categorytree>
== Referencias ==
[[Category:Caracteres]]
eehsp8z2mxqpvgpfn3yplnugvdwkce3
String case changes
0
262
3727
1040
2019-05-06T22:04:23Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Caracteres</categorytree>
== Referencias ==
[[Category:Caracteres]]
eehsp8z2mxqpvgpfn3yplnugvdwkce3
String characters
0
263
3728
1041
2019-05-06T22:04:47Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Caracteres</categorytree>
== Referencias ==
[[Category:Caracteres]]
eehsp8z2mxqpvgpfn3yplnugvdwkce3
String comperison operators
0
264
3729
1042
2019-05-06T22:05:10Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Caracteres</categorytree>
== Referencias ==
[[Category:Caracteres]]
eehsp8z2mxqpvgpfn3yplnugvdwkce3
String constructor
0
258
3730
1036
2019-05-06T22:06:02Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Caracteres</categorytree>
== Referencias ==
[[Category:Caracteres]]
eehsp8z2mxqpvgpfn3yplnugvdwkce3
String index of
0
265
3731
1043
2019-05-06T22:06:24Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Caracteres</categorytree>
== Referencias ==
[[Category:Caracteres]]
eehsp8z2mxqpvgpfn3yplnugvdwkce3
String length & string leng trim
0
266
3732
1044
2019-05-06T22:06:47Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Caracteres</categorytree>
== Referencias ==
[[Category:Caracteres]]
eehsp8z2mxqpvgpfn3yplnugvdwkce3
String start with ends with
0
268
3734
1046
2019-05-06T22:07:28Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Caracteres</categorytree>
== Referencias ==
[[Category:Caracteres]]
eehsp8z2mxqpvgpfn3yplnugvdwkce3
String substring
0
269
3735
1047
2019-05-06T22:07:48Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Caracteres</categorytree>
== Referencias ==
[[Category:Caracteres]]
eehsp8z2mxqpvgpfn3yplnugvdwkce3
String to int
0
270
3736
1048
2019-05-06T22:08:11Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Caracteres</categorytree>
== Referencias ==
[[Category:Caracteres]]
eehsp8z2mxqpvgpfn3yplnugvdwkce3
Switch case 1
0
246
3756
1017
2019-05-06T22:17:28Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Estructuras de control</categorytree>
== Referencias ==
[[Category:Estructuras de control]]
owhftcjoep9mx6gdloryrwklf4owjuv
Switch case 2
0
247
3757
1018
2019-05-06T22:17:52Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Estructuras de control</categorytree>
== Referencias ==
[[Category:Estructuras de control]]
owhftcjoep9mx6gdloryrwklf4owjuv
Tabla ASCII
0
379
3777
3776
2019-05-06T22:35:26Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
'''American Standard Code for Information Interchange''' ASCII, es la representación numérica de los caracteres estandar.
Las computadoras sólo pueden entender números, por lo que el código ASCII se desarrolló para solucionar este problema.
== 32 primeros ==
Los primeros 32 caracteres son de control, no imprimibles.
{|class="wikitable"
!DEC!!Carácter!!Descripción!!DEC!!Carácter!!Descripción
|-
|0||NULL||Carácter nulo||16||DLE||Esc. vínculo datos
|-
|1||SOH||inicio encabezado||17||DC1||control disp. 1
|-
|2||STX||inicio texto||18||DC2||control disp. 2
|-
|3||ETX||fin de texto||19||DC3||control disp. 3
|-
|4||EOT||fin transmisión||20||DC4||control disp. 4
|-
|5||ENQ||consulta||21||NAK||conf. negativa
|-
|6||ACK||reconocimiento||22||SYN||inactividad sínc
|-
|7||BEL||timbre||23||ETB||fin bloque trans
|-
|8||BS||retroceso||24||CAN||cancelar
|-
|9||HT||tab horizontal||25||EM||fin del medio
|-
|10||LF||nueva línea||26||SUB||sustitución
|-
|11||VT||tab vertical||27||ESC||escape
|-
|12||FF||nueva página||28||FS||sep. archivos
|-
|13||CR||retorno de carro||29||GS||sep. grupos
|-
|14||SO||desplaza afuera||30||RS||sep. registros
|-
|15||SI||desplaza adentro||31||US||sep. unidades
|-
| || || ||127||DEL||Suprimir
|}
== Imprimibles ==
Los caracteres imprimibles.
{|class="wikitable col1cen col2cen col3cen col4cen"
!Codigo!!Caracter!!Codigo!!Caracter
|-
|32||espacio||48||0
|-
|33||!||49||1
|-
|34||"||50||2
|-
|35||#||51||3
|-
|36||$||52||4
|-
|37||%||53||5
|-
|38||&||54||6
|-
|39||'||55||7
|-
|40||(||56||8
|-
|41||)||57||9
|-
|42||*||58||:
|-
|43||+||59||;
|-
|44||,||60||<
|-
|45||-||61||=
|-
|46||.||62||>
|-
|47||/||63||?
|}
{|class="wikitable col1cen col2cen col3cen col4cen"
!Codigo!!Caracter!!Codigo!!Caracter
|-
|64||@||96||`
|-
|65||A||97||a
|-
|66||B||98||b
|-
|67||C||99||c
|-
|68||D||100||d
|-
|69||E||101||e
|-
|70||F||102||f
|-
|71||G||103||g
|-
|72||H||104||h
|-
|73||I||105||i
|-
|74||J||106||j
|-
|75||K||107||k
|-
|76||L||108||l
|-
|77||M||109||m
|-
|78||N||110||n
|-
|79||O||111||o
|-
|80||P||112||p
|-
|81||Q||113||q
|-
|82||R||114||r
|-
|83||S||115||s
|-
|84||T||116||t
|-
|85||U||117||u
|-
|86||V||118||v
|-
|87||W||119||w
|-
|88||X||120||x
|-
|89||Y||121||y
|-
|90||Z||122||z
|-
|91||[||123||{
|-
|92||\||124||<nowiki>|</nowiki>
|-
|93||]||125||}
|-
|94||^||126||~
|-
|95||_|| ||
|}
== Caracteres especiales ==
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
* [https://manueldelgadocrespo.blogspot.com/p/ta.html Tabla ASCII] - Manuel Delgado
* [https://elcodigoascii.com.ar/ Codigo ASCII]
[[Category:Serial]]
en6b4qkc2vhibd3mgnm41sw83becc08
Time
0
414
4762
4759
2019-07-15T22:21:48Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
La librería [https://github.com/PaulStoffregen/Time TimeLib.h] de Paul Stoffregen...
== Placas aplicables ==
Todas.
== time_t ==
[[time_t]] es un tipo [[unsigned long]] de 4 byte (32 bits) usado para almacenar los segundos transcurridos desde el 1-ENE-1970 o también llamada [https://www.unixtimestamp.com Unix Time Stamp].
=== Sintaxis ===
<pre>
time_t variable [= valor];
</pre>
=== Parámetros ===
;variable: Nombre de la variable que definiras.
;valor: Numero del tipo TimeStamp de UNIX. Numero tipo [[unsigned long]].
=== Funciones ===
{|class="wikitable"
|+Funciones disponibles para time_t
|-
!Función!!Descripción!!Ejemplo
|-
|[[now()]]||Almacena la hora actual en tiempo UNIX||time_t t = now();
|-
|year()||Muestra el año||year();
|-
|month()||Muestra el mes (1~12)||month();
|-
|monthStr()||Nombre del mes (January, February, March, April, May, June, July...)||monthStr(month());
|-
|monthShortStr()||Nombre corto del mes (Jan, Feb, Mar, Dic) ||monthShortStr(month());
|-
|day()||Muetsra el dia (1~31)||day();
|-
|weekday()||Muestra dia de la semana (1=domingo) (1~7)||weekday();
|-
|dayStr()||Nombre del dia (Sunday, Monday, Tuesday, Wenesday, Thursday, Friday, Saturday)||dayStr(weekday());
|-
|dayShortStr()||Nombre corto del dia (Sun, Mon, Tue, Wen, Thu, Fri, Sat)||dayShortStr(weekday());
|-
|hour()||Muestra las horas (0~23)||hour();
|-
|minute()||Muestra los minutos (0~59)||minute();
|-
|second()||Muestra los segundos (0~59)||second();
|-
|[[millis()]]||Muestra los milisegundos (0~999)||millis();
|-
|hourFormat12()||Formatea a 12 horas||
|-
|isAM()||Devuelve verdadero por la mañana||isAM()
|-
|isPM()||Devuelve verdadero por la tarde||isPM();
|-
|[[setTime()]]||Establece fecha-hora. Puede ser en segundos o hr,min,sec,dia,mes,año.||setTime(0,0,0,14,7,2018);
|-
|[[adjustTime()]]||Ajusta la fecha-hora del sistema agregando un valor||adjustTime(3600);
|-
|[[setSyncProvider()]]||Establecer proveedor de hora externa||
|-
|[[setSyncInterval()]]||Establecer el número de segundos entre re-sincronizaciones||
|-
|[[makeTime()]]||Convierte variable tipo '''tmElement_t''' en variable tipo '''time_t'''||makeTime(tm);
|-
|[[breakTime()]]||Convierte variable tipo '''time_t''' en variable tipo '''tmElement_t'''||makeTime(tm);
|-
|[[timeStatus()]]||Indica si el tiempo se sincronizado recientemente. Devuelve: timeNotSet/timeNeedSync/timeSet||
|}
== tmElements_t ==
[[tmElements_t]] es una matriz de seis (6) elementos que proporciona la libreria '''TimeLib.h''' y que permite manipular de manera fácil (sin tener que usar el Tiempo Unix) todos los elementos necesarios para definir una fecha-hora.
=== Sintaxis ===
<pre>
tmElements_t variable;
</pre>
=== Parámetros ===
;variable:Nombre de la variable que definiras.
=== Métodos ===
{| class="wikitable"
|+Metodos disponibles para tmElementos_t
|-
! Metodo !! Descripcion
|-
| .Second || Segundo (0~59)
|-
| .Minute || Minuto (0~59)
|-
| .Hour || Hora (0~23)
|-
| .Day || Dia (1~31)
|-
| .Month || Mes (1~12)
|-
| .Year || Año (0~99) resta de 1970.
|-
|[[makeTime()]]||Convierte variable tipo [[tmElements_t]] en variable tipo [[time_t]].
|-
|[[breakTime()]]||Convierte variable tipo [[time_t]] en variable tipo [[tmElements_t]].
|}
{{Nota|Para representar el año 2019 debes poner 49 (2019-1970) y no olvidar sumar 1920 nuevamente al resultado.}}
== Comentarios ==
== Advertencias ==
== Ejemplo 1 ==
En este ejemplo incluimos la fecha hora 2018-7-14 10:0:0 y mostramos su avance cada 1350 milisegundos.
<syntaxhighlight lang="c++">
#include <TimeLib.h>
void setup(){
Serial.begin(9600);
setTime(10,0,0,14,7,2018); //h,min,seg,dia,mes,año
}
void loop(){
time_t t=now();
Serial.print(hour(t));
Serial.print(":");
Serial.print(minute(t));
Serial.print(":");
Serial.println(second(t));
delay(1350);
}
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo podemos enviar la fecha-hora por consola serie. Para convertir Unix Time te recomiendo usar esto. Ejemplo: T1552204800 = 2019-MAR-10 8:00:00
<syntaxhighlight lang="c++">
#include <TimeLib.h>
#define TIME_HEADER "T" //Encabezado de mensaje de sincronizacion
void setup() {
Serial.begin(9600);
while (!Serial); //Solo se requiere para Leonardo
pinMode(13, OUTPUT);
Serial.println("Esperando mensaje de sincronizacion");
}
void loop(){
if (Serial.available()) {
sincro();
}
if (timeStatus() == timeSet) {
pantalla(); //Muestra fecha hora
digitalWrite(13, HIGH); //Sincronizado
}else{
digitalWrite(13, LOW); //Requiere sincronizar
}
delay(1000);
}
void sincro() {
if (Serial.find(TIME_HEADER)) {
unsigned long pctime = Serial.parseInt();
if (pctime >= 1357041600) { //Verifica valides de fecha-hora (mayor a 1-ENE-2013)
setTime(pctime); //Sincroniza reloj Arduino con fecha-hora recivida por puerto serie
}
}
}
void pantalla(){
Serial.print(year());
Serial.print('-');
Serial.print(month());
Serial.print('-');
Serial.print(day());
Serial.print(' ');
Serial.print(hour());
printDigito(minute());
printDigito(second());
Serial.println();
}
void printDigito(int dig){
Serial.print(':');
if (dig < 10){
Serial.print('0');
}
Serial.print(dig);
}
</syntaxhighlight>
== Ejemplo 3 ==
Con este ejemplo Arduino espera que se envíe desde el monitor un tiempo UNIX del formato T1531526400 (2018-7-14 0:0:0).
<syntaxhighlight lang="c++">
#include <TimeLib.h>
void setup(){
Serial.begin(9600);
pinMode(13, OUTPUT);
Serial.println("Esperando tiempo UNIX por puerto serie");
}
void loop(){
if (Serial.available()) {
sincroniza();
}
if (timeStatus()!= timeNotSet) {
reloj();
}
if (timeStatus() == timeSet) {
digitalWrite(13, HIGH); //Sincronizado
}else{
digitalWrite(13, LOW); //Falta sincronizar
}
delay(1000);
}
void reloj(){
Serial.print(year());
Serial.print("-");
if (month()<10){
Serial.print('0');
}
Serial.print(month());
Serial.print("-");
if (day()<10){
Serial.print('0');
}
Serial.print(day());
Serial.print(" ");
if (hour()<10){
Serial.print('0');
}
Serial.print(hour());
Serial.print(":");
if (minute() < 10){
Serial.print('0');
}
Serial.print(minute());
Serial.print(":");
if (second() < 10){
Serial.print('0');
}
Serial.println(second());
}
void sincroniza() {
const unsigned long DEFAULT_TIME = 1514764800; //1-ENE-2018
if (Serial.find("T")) {
unsigned long pc = Serial.parseInt();
//Controla valides mayor a 1-ENE-2018
if (pc >= DEFAULT_TIME) {
setTime(pc); //Ajusta la fecha-hora
}
}
}
</syntaxhighlight>
== Ejemplo 4 ==
Mostramos las cadenas de dia y mes. Recuerde que no es opcional el parametro.
<syntaxhighlight lang="c++">
#include <TimeLib.h>
void setup(){
Serial.begin(9600);
for (byte n=1; n<=7; n++){
Serial.print(dayStr(n));
Serial.print(" - ");
Serial.println(dayShortStr(n));
}
Serial.println("-------");
for (byte n=1; n<=12; n++){
Serial.print(monthStr(n));
Serial.print(" - ");
Serial.println(monthShortStr(n));
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
* [http://playground.arduino.cc/code/time Time] de Paul Stoffregen
* [https://github.com/PaulStoffregen/TimeAlarms TimeAlarms] de Paul Stoffregen
* [https://github.com/PaulStoffregen/TimerOne TimerOne] de Paul Stoffregen
* [http://www.arduino.cc/playground/Code/TimedAction TimedAction] de Alexander Brevig
[[Category:Librerias]]
[[Category:Libreria Time]]
cs6fgi3t3hlnwb32poriq75obqkjzi1
TimeAlarms
0
481
4763
4761
2019-07-15T22:22:48Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
[https://github.com/PaulStoffregen/TimeAlarms TimeAlarm] es una libreria de Paul Stoffregen y es un complemento de la libreria Time para realizar tareas a intervalos especificos.
{{Tip|Los intervalos a programar pueden ir desde 1 segundo hasta años. Para intervalor mas cortos vea la libreria [http://www.arduino.cc/playground/Code/TimedAction TimedAction] de Alexander Brevig.}}
== Tipos de tareas ==
Existen dos tipos de tareas que se pueden crear para que se repitan continuamente o para que se realicen una sola vez.
;Alarmas:Las tareas programadas a una hora particular del día.
;Temporizadores:Las tareas programadas una vez transcurrido un intervalo de tiempo.
== Sintaxis ==
<pre>
#include <Time.h>
#include <TimeAlarms.h>
setTime(hh,mm,ss,d,m,a);
Alarm.alarmRepeat([dia,]hh,mm,ss, funcion1);
Alarm.alarmRepeat(valor, funcion2);
Alarm.alarmOnce([dia,]hh,mm,ss, funcion3);
Alarm.alarmOnce(valor, funcion4);
Alarm.timerRepeat(hh,mm,ss, funcion5);
Alarm.timerRepeat(valor, funcion6);
Alarm.timerOnce(hh,mm,ss, funcion7);
Alarm.timerOnce(valor, funcion8);
Alarma.triggerOnce(valor, funcion9);
Alarm.delay(ms);
</pre>
== Parámetros ==
;dia:Dia de la semana. dowMonday, dowSaturday.
;hh:Hora
;mm:Minutos
;ss:Segundos
;ms:Milisegundos
;valor:Valor de tiempo tipo [[time_t]]
;Funcion:Nombre de la función que se invoca al cumplirse el tiempo
== Retorno ==
Lo que hace cada una de estos métodos es activar la función asociada.
== Métodos ==
{| class="wikitable"
|+Metodos de libreria TimeAlarm
|-
! Método !! Descripción
|-
| Alarm.alarmRepeat([dia,]hh,mm,ss, AlarmFunction); || Alarma continua todos los dias
|-
| Alarm.alarmOnce([dia,]hh,mm,ss, AlarmFunction); || Alarma que se activa la proxima ves que ocurra.
|-
| Alarm.triggerOnce(value, AlarmFunction); || Una sola alarma determinada por valor [[time_t]]
|-
| Alarm.timerRepeat(hh,mm,ss, TimerFunction); || Llama continuamente a TimerFunction
|-
| Alarm.timerOnce(hh,mm,ss, TimerFunction); || Llama una sola vez a TimerFunction
|-
| Alarm.delay(periodo) || Similar de [[delay()]] de Arduino, periodo dedo en milisegundos.
|}
== Funciones de bajo nivel ==
{| class="wikitable"
|+Metodos de libreria TimeAlarm
|-
! Método !! Descripción
|-
| disable(ID); || evitar que la alarma asociada con la ID dada se dispare.
|-
| enable(ID); || habilita la alarma con el ID dado.
|-
| write(ID, valor); || Sobreescribe la alarma ID con el valor
|-
| read(ID); || Lee la alarma ID
|-
| readType(ID); || Retorna el tipo de alarma
|-
| getTriggeredAlarmId(); || Retorna el ID de la alarma activa.
|}
== Comentarios ==
* Esta libreria requiere de la liberia [[Time]]
* Los intervalos a programar pueden ir desde 1 segundo hasta años.
== Advertencias ==
== Ejemplo ==
<syntaxhighlight lang="c++">
#include <Time.h>
#include <TimeAlarms.h>
void setup(){
Serial.begin(9600);
setTime(8,29,0,1,7,19); //Poner tiempo a las 8:29:00 am del -JUL-2019
Alarm.alarmRepeat(8,30,0, MorningAlarm); //Todos los dias a las 8:30
Alarm.alarmRepeat(17,45,0, EveningAlarm); //Todos los dias a las 5:45pm
Alarm.alarmRepeat(dowSaturday,8,30,30, WeeklyAlarm); //Cada sabado a las 8:30:30am
Alarm.timerRepeat(15, Repeats); //Cada 15 segundos
Alarm.timerOnce(10, OnceOnly); //Dentro de 10 segundos
}
void loop(){
relog();
Alarm.delay(1000); //Espera 1 segundo
}
// functions to be called when an alarm triggers:
void MorningAlarm(){
Serial.println("Alarma: apaga luces");
}
void EveningAlarm(){
Serial.println("Alarma: prende luces");
}
void WeeklyAlarm(){
Serial.println("Alarma: Es lunes temprano");
}
void ExplicitAlarm(){
Serial.println("Alarma: - this triggers only at the given date and time");
}
void Repeats(){
Serial.println("Temporizador: cada 15 segundos.");
}
void OnceOnly(){
Serial.println("Temporizador: solo una vez.");
}
void relog(){
if (hour() < 10){
Serial.print('0');
}
Serial.print(hour());
Serial.print(':');
if (minute() < 10){
Serial.print('0');
}
Serial.print(minute());
Serial.print(':');
if (second() < 10){
Serial.print('0');
}
printDigits();
Serial.println(second());
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
* [http://playground.arduino.cc/code/time Time] de Paul Stoffregen
* [https://github.com/PaulStoffregen/TimeAlarms TimeAlarms] de Paul Stoffregen
* [https://github.com/PaulStoffregen/TimerOne TimerOne] de Paul Stoffregen
* [http://www.arduino.cc/playground/Code/TimedAction TimedAction] de Alexander Brevig
[[Category:Librerias]]
[[Category:Libreria Time]]
g21dwq9ahnk9n650w34zpekulafchxn
TimeSpan()
0
397
5138
5137
2020-01-23T16:43:53Z
Kike GL
2
/* Ejemplo 1 */
wikitext
text/x-wiki
== Descripción ==
Funcion util para representar un intervalo de tiempo con precision de segundos.
== Sintaxis ==
<pre>
#include <RTClib.h>
TimeSpan(dd,hh,mm,ss);
TimeSpan(segundos);
</pre>
== Parámetros ==
;dd:dias tipo [[int]] (0 a 365)
;hh:horas tipo [[byte]] (0 a 23)
;mm:minutos tipo [[byte]] (0 a 59)
;ss:segundos tipo [[byte]] (0 a 59)
;segudos:numero de segundos totales (int) (0 a 32...)
== Retorna ==
== Métodos ==
{| class="wikitable"
|-
! Metodo !! Descripción
|-
| .days() || Dias
|-
| .hours() || Horas
|-
| .minutes() || Minutos
|-
| .seconds() || Segundos
|-
| .totalsecons() || Segundos totales
|}
== Comentarios ==
== Advertencias ==
* Tenga en cuenta que el método .day() se usa con [[DateTime]] mientras que aquí en método es '''days()'''.
* Debe trabajar con el tipo de dato [[DateTime]]
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
#include <RTClib.h>
DateTime t1 (2018,7,14,8,0,0); //2018-7-14 8:00:00
DateTime t2 (2018,7,14,18,0,0); //2018-7-14 18:00:00
//Calculos 1
TimeSpan t3 = t2 - t1;
//Mostrar
Serial.print(t3.days()); //0
Serial.print(t3.hours()); //10
Serial.print(t3.minutes()); //0
Serial.print(t3.seconds()); //0
//Calculos 2
DateTime t4 = t1 + TimeSpan(0,1,0,0); //Añadir una hora
DateTime t5 = t1 + TimeSpan(1,0,0,0); //Añadir un dia
DateTime t6 = t1 - TimeSpan(7,0,0,0); //Restar una semana
//Mostrar
Serial.print(t4.day()); //14
Serial.print(t4.hour()); //9
Serial.print(t4.minute()); //0
Serial.print(t4.second()); //0
</syntaxhighlight>
{{Nota|No confundas el metodo day() de DateTime con el metodo .days() de TimeSpan.}}
== Vea también ==
<categorytree mode=all>Libreria RTC</categorytree>
<categorytree mode=all>Libreria Time</categorytree>
== Referencias ==
* [https://adafruit.github.io/RTClib/html/class_time_span.html Clase TimeSpan()] - Adafruit
* [https://github.com/adafruit/RTClib RTClib] - Adafruit
* [https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/what-is-an-rtc Que es RTC] - Adafruit
[[Category:Libreria RTC]]
bwri4l4wb842z15gql8skgnc0vjigyi
Tip 1
0
372
4869
2049
2019-09-13T21:30:09Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Hay varias maneras de detener la ejecución de un [[boceto]] Arduino, también depende de lo que espere que sea "detenido". Digo esto porque el Arduino no usa un sistema operativo, su [[boceto]] nunca puede salir a ninguna parte, ya que es todo lo que el AVR tiene que trabajar.
A continuacion algunas alternativas para detener el dispositivo.
== Sin loop() ==
Cuando solo se quiere efectuar un calculo por ejemplo y no es necesario tener la repetitividad, deja en blanco [[loop()]]
<pre>
void setup(){
Serial.begin(115200);
Serial.println(sq(3));
}
void loop(){
//Nada
}
</pre>
== Manualmente ==
Cuando se usa el método Arduino normal para escribir un [[boceto]] con [[setup()]] y [[loop()]], su programa se ejecutará para siempre, lo que significa que la única vez que se puede detener a Arduino es cuando se elimina la energía. Para poner el Arduino en un estado parado, podemos simplemente usar un bucle infinito para bloquear efectivamente la uC, bueno, casi...
<pre>
while (true){}
</pre>
Este no es exactamente el resultado que estamos buscando todavía, ya que el Arduino usa un mecanismo llamado [[interrupciones]] para proporcionar una gran cantidad de funcionalidad y detienen el flujo del programa principal para que se ejecute "algo". Entonces, para completar este código para "detener" el uC, podemos agregar la función AVR para deshabilitar las interrupciones globales (o todas).
<pre>
noInterrups();
while (true){}
</pre>
== Funciones de C ==
También podemos usar la funcion C '''cli()''' o '''abort()''' o '''exit()'''. Entonces hay tres métodos para detener el Arduino, y cada uno hace lo mismo, sin embargo, cada uno se compila a un tamaño diferente en las pruebas.
Con cualquiera de estos métodos el [[boceto]] sigue dando vueltas a toda velocidad y está completamente bloqueado hasta que se apaga la corriente, ya sea físicamente o mediante el uso del botón de reinicio.
== Poner a dormir ==
Con la administración avanzada de la energía se puede usar para poner el dispositivo en modo de suspensión y usar menos energía. Sin embargo, si el dispositivo es recuperable sin un reinicio, el dispositivo se vuelve mucho más amigable para el usuario.
La documentación de AVR para "Administración de energía y modos de suspensión" tiene algunos ejemplos de cómo dormir el uC. Sleeping se puede usar tanto para una pausa controlada como para un bloqueo completo, similar al ciclo infinito explicado anteriormente.
<pre>
cli();
sleep_enable();
sleep_cpu();
sleep_mode();
sleep_bod_disable()
</pre>
La funcion sleep_disable() no es necesaria ya que el dispositivo nunca se despertará debido a que las interrupciones se desactivan.
== Vea también ==
<categorytree mode=all>Tips</categorytree>
== Referencias ==
* [http://arduino.land/FAQ/content/7/47/en/how-to-stop-an-arduino-sketch.html Arduino Land]
* [http://www.nongnu.org/avr-libc/user-manual/group__avr__sleep.html Standard C library for AVR-GCC]
[[Category:Tips]]
knj9hbbs2xheiicjtr3u2esnume8h23
Tip 2
0
483
4829
2019-07-24T23:37:04Z
Kike GL
2
Página creada con «== Descripción == Si tenemos dispositivos en casa como camaras IP, automatismos gobernados por Internet, NAS que contienen datos, etc; acceder a ellos es fácil si tenemos...»
wikitext
text/x-wiki
== Descripción ==
Si tenemos dispositivos en casa como camaras IP, automatismos gobernados por Internet, NAS que contienen datos, etc; acceder a ellos es fácil si tenemos una IP fija. Si no disponemos de ella por precio o disponibilidad, hay otros métodos que no son fáciles de configurar o también son de pago.
Esta solución nos envia un correo electrónico cada vez que cambia nuestra IP y así poder acceder a casa sin problemas. Solo necesitamos un ESP8266 y una cuenta de Gmail. La libreria Gsender nos facilita mucho la programación y además podemos usar la misma cuenta de Gmail para enviar y recibir ese correo.
El programa conecta con nuestro router y usa un servicio gratuito ipify.org que nos devuelve nuestra IP. Si es diferente a la que ya teniamos antes, entonces nos manda un correo a nuestro teléfono con la nueva.
Solo tenemos que determinar con que frecuencia queremos que el programa haga esa verificación
== Código ==
<syntaxhighlight lang="c++">
#include "ESP8266WiFi.h"
#include "Gsender.h"
const char* ssid = "Jopapa";
const char* password = "pepitogrillo";
String miIP="0.0.0.0"; //Para que en primera conexión nos diga la que tenemos
void setup() {
Serial.begin(115200);
delay(10);
//Conexión a nuestro router
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi conectada");
Serial.print("Direccion IP interna del ESP8266: ");
Serial.println(WiFi.localIP());
}
void loop() {
String ip = getIp();
if (ip != miIP){
Serial.println("Atencion, tu IP ha cambiado");
Serial.println("Tu anterior IP era: "+ miIP);
miIP=ip;
Serial.println("Tu actual IP es: " + miIP);
//Enviar e-mail con la nueva IP
Gsender *gsender = Gsender::Instance();
String subject = "Tu nueva IP";
if (gsender->Subject(subject)->Send("jopapagrillo@gmail.com", "Tu actual IP es: " + miIP)) {
Serial.println("Mensage enviado.");
}else{
Serial.print("Error enviando mensage: ");
Serial.println(gsender->getError());
}
}
//Crear aquí un delay o un millis para chekear la IP, por ejemplo cada hora o más
delay(60000);
}
String getIp(){
WiFiClient client;
if (client.connect("api.ipify.org", 80)) {
Serial.println("Conectado a ipify.org");
client.println("GET / HTTP/1.0");
client.println("Host: api.ipify.org");
client.println();
}else{
Serial.println("Conexión a ipify.org fallida");
return String();
}
delay(5000);
String line;
while(client.available()){
line = client.readStringUntil('\n');
//Serial.println(line);
}
return line;
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tips</categorytree>
== Referencias externas ==
* [http://www.jopapa.me/ippormail.html Saber nuestra IP por Mail] - jojopapa
[[Category:Tips]]
5izrxc68ebbusytlda7sncutr42z5mm
Tip 3
0
486
4967
4966
2019-09-25T16:40:00Z
Kike GL
2
/* Código 4 */
wikitext
text/x-wiki
== Descripción ==
Intentare explicar la diferencia entre usar [[delay()]] y [[millis()]].
Ambos códigos hacen lo mismo prender y apagar un LED cada 0.5 seg.
{{Tip|Este metodo permite a Arduino hacer mas cosas en el mismo ciclo.}}
== Código 1 ==
Este ejemplo funciona muy bien porque lo único que tiene que hacer Arduino es prender y apagar el LED. Pero si ademas quisieras hacer algo mas no funcionaria porque los [[delay()]] paralizan todas las operaciones y no habria tiempo para hacer nada mas. Aumentar el valor de n por ejemplo.
<syntaxhighlight lang="c++">
unsigned long n;
void setup(){
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop(){
digitalWrite(13, HIGH); //Prende LED
delay(500); //Espera 0.5 seg
digitalWrite(13, LOW); //Apaga LED
delay(500); //Espera 0.5 seg
n++;
Serial.println(n);
}
</syntaxhighlight>
{{Nota|Veras que el valor de n se incrementa cada 1 segundo.}}
== Código 2 ==
Con este codigo te das cuenta que Arduino puede hacer otras tareas (aumentar el valor de n por ejemplo), porque le sobra tiempo hasta que debe conmutar el LED, porque el corre a una velocidad muy superior. Aproximadamente a 16 MHz.
<syntaxhighlight lang="c++">
unsigned long n,t;
void setup(){
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop(){
if (millis() - t > 500){
digitalWrite(13, !digitalRead(13)); //Conmuta LED
t = millis();
}
n++;
Serial.println(n);
}
</syntaxhighlight>
{{Nota|Veras que el valor de n se incrementa muy rápidamente en cada ciclo de loop().}}
== Código 3 ==
Con este código te das cuenta que Arduino puede aparentar multihilo haciendo que dos LED intermitentes a destiempo.
<syntaxhighlight lang="c++">
const byte pinRojo = 4; //LED rojo
const byte pinVerde = 5; //LED verde
bool estadoRojo; //Estado LED rojo
unsigned long previoRojo; //Ultimo cambio LED rojo
int intervaloRojo = 500; //Intervalo LED rojo (milliseconds)
bool estadoVerde; //Estado LED verde
unsigned long previoVerde; //Ultimo cambio LED verde
int intervaloVerde = 1000; //Intervalo LED verde (milliseconds)
void setup() {
pinMode(pinRojo, OUTPUT);
pinMode(pinVerde, OUTPUT);
}
void loop(){
LedRojo();
LedVerde();
}
void LedRojo(){
if (millis() - previoRojo > intervaloRojo) {
previoRojo = millis();
estadoRojo = !estadoRojo;
digitalWrite(pinRojo, estadoRojo);
}
}
void LedVerde(){
if (millis() - previoVerde > intervaloVerde) {
previoVerde = millis();
estadoVerde = !estadoVerde;
digitalWrite(pinVerde, estadoVerde);
}
}
</syntaxhighlight>
{{Nota|Veras que cada LED puede ir a su propio ritmo de forma independiente.}}
== Código 4 ==
Se me ocurrio comparar la velocidad de algunas instrucciones.
<syntaxhighlight lang="c++">
bool x;
int n;
void setup(){
Serial.begin(115200);
pinMode(13, OUTPUT);
}
void loop(){
//digitalWrite(13, !digitalRead(13)); //598 124
digitalWrite(13, x); //787 629
x = !x;
//PORTB = PORTB ^ 32; //1446 372
n++;
if (millis() > 5000){
Serial.println(n);
while (1);
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tips</categorytree>
== Referencias externas ==
* [http://www.jopapa.me/ippormail.html Saber nuestra IP por Mail] - jojopapa
[[Category:Tips]]
qebiofz3zsps0iwygyu5idqb1o0blzj
Tip 4
0
489
5113
4916
2019-12-16T23:22:58Z
Kike GL
2
/* Código 2 */
wikitext
text/x-wiki
== Descripción ==
Como detectar el flanco de subida (RISSING) de un pulsador, rele o dispositivo con contacto mecánico.
{{Tip|Este método soluciona el efecto de rebote.}}
== Código 1 ==
Con este código detectamos el flanco de subida (RISSING) de un contacto mecánico con una conexión en pulldown.
<syntaxhighlight lang="c++">
bool actual,anterior;
void setup(){
Serial.begin(9600);
pinMode(2, INPUT);
}
void loop(){
actual = digitalRead(2);
if (actual && !anterior){
Serial.println("Flanco de subida detectado");
}
anterior = actual;
}
</syntaxhighlight>
{{Nota|Veras que solo aparece una vez el mensaje de deteccion por cada pulsacion sin importar e tiempo que dure dicha pulsacion.}}
== Código 2 ==
Con este código detectamos el flanco de bajada (FALING) de un contacto mecánico con una conexión en pullup.
<syntaxhighlight lang="c++">
bool actual,anterior;
void setup(){
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
}
void loop(){
actual = digitalRead(2);
if (!actual && anterior){
Serial.println("Flanco de bajada detectado");
}
anterior = actual;
}
</syntaxhighlight>
{{Nota|El unico cambio es en la condicion del if().}}
== Código 3 ==
En este ejemplo tenemos que detectar el numero de pulsaciones de un boton durante medio seg y de acuerdo a eso prender un LED distinto durante 3 seg adicionales.
<syntaxhighlight lang="c++">
bool valor,anterior,LED;
unsigned long t1;
byte n;
void setup(){
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
...
pinMode(12, INPUT_PULLUP);
}
void loop(){
valor = digitalRead(12);
if (!valor && anterior && !LED){
if (n == 0){
t1 = millis();
}
n++;
}
anterior = valor;
//Detiene lectura en medio seg
if (millis() - t1 > 500 && n > 0 && !LED){
LED = true;
}
//Acciona LED
if (LED){
digitalWrite(n+1, HIGH);
}
//Apagar todo luego de 3 seg
if (millis() - t1 > 3500 && LED){
LED = false;
digitalWrite(n+1, LOW);
n = 0;
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tips</categorytree>
== Referencias externas ==
[[Category:Tips]]
s7jhndpla5us4tcuh8tpy0bhbgptjpj
Tip 5
0
493
4985
4984
2019-09-26T17:00:15Z
Kike GL
2
/* Referencia externa */
wikitext
text/x-wiki
== Descripción ==
Cuando tenemos que manejar muchos pines, es mejor adecuar nuestros requerimientos a bancos completos y manejar el banco directamente porque es mucho mas rápido en Arduino.
== Ejemplo ==
En este ejemplo queremos poner como salidas los pines D2 a D13, del D2 a D10 en LOW y D11 a D13 en HIGH.
{{Tip|No debemos cambiar los pines 0 (Rx) y 1 (Tx) o no funcionara el puerto serie.}}
<syntaxhighlight lang="c++">
void setup() {
byte pin;
for (pin=2; pin<=13; ++pin) {
pinMode(pin, OUTPUT);
}
for (pin=2; pin<=10; ++pin) {
digitalWrite(pin, LOW);
}
for (pin=11; pin<=13; ++pin) {
digitalWrite(pin, HIGH);
}
}
</syntaxhighlight>
Este código hace lo mismo pero mucho mas rapido.
<syntaxhighlight lang="c++">
void setup(){
//Pines D7..D1 (Tx) como salida y D0 (Rx) como entrada
DDRD = B11111110; //Pines digitales: 7,6,5,4,3,2,1,0
//Pines D13..D8 como salidas
DDRB = B00111111; //Pines digitales: -,-,13,12,11,10,9,8
//Pines D7..D2 en LOW
PORTD &= B00000011; //Apaga: 2..7; deja tan cual 0 y 1.
//Pines D13..D11 en HIGH y D10..D8 en LOW
PORTB = B00111000; //Prende: 13,12,11; apaga: 10,9,8.
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tips</categorytree>
== Referencia externa ==
* [https://playground.arduino.cc/Code/BitMath/ Bit Math] - Playgroung Arduino
[[Category:Tips]]
iejuancujn84vu41d02t85wyorhomnc
Tone
0
448
5044
5043
2019-10-07T21:31:02Z
Kike GL
2
/* Ejemplo 3 */
wikitext
text/x-wiki
== Descripción ==
La librería [https://github.com/bhagman/Tone Tone] de Brett Hagman para producir una onda cuadrada de la frecuencia especificada en el rango audible, con un ciclo de trabajo del 50%, en cualquier pin de Arduino.
Opcionalmente, se puede especificar una duración; de lo contrario, la onda continúa hasta que la funcion stop() sea invocada.
El pin se puede conectar a un zumbador piezoeléctrico u otro altavoz para reproducir tonos.
{{Nota|Desde Arduino IDE 18 esta incorporada una version simplificada.}}
== Placas aplicables ==
La cantidad de tonos que se pueden reproducir simultáneamente depende de la cantidad de temporizadores de hardware (con capacidad CTC) disponibles en el microcontrolador.
{| class="wikitable col2cen"
|+Arduino segun uC
|-
! Ardujno !! Cantidad !! Temporizadores
|-
| ATmega 8 || 2 || 2 y 1
|-
| ATmega 168/328 || 3 || 2, 1 y 0
|-
| ATmega 1280 || 6 || 5, 4, 3, 2, 1 y 0
|}
{{Nota|El orden de asignacion de temporizadores es el referido}}
== Sintaxis ==
<pre>
#include <Tone.h>
Tone pito;
</pre>
== Métodos ==
{| class="wikitable"
|+Métodos disponibles para librería Tone.h
|-
! Método !! Descripción
|-
| begin(pin) || Prepara un pin para tocar un tono.
|-
| isPlaying() || Devuelve true si el tono se esta reproducionedo.
|-
| play(frecuencia [, duracion]) || Toca un tono de la frecuencia (Hz), por duracion de milisegundos. Si no pone duracion el tono se tocada indefinidamenre hasta stop().
|-
| stop() || Deja de tocar el tono.
|}
{{Nota|play() no bloque al Arduino independientemente de duracion.}}
== Lista de frecuencias ==
{| class="wikitable"
|+Frecuencias posibles
|-
! Contante !! Frecuencia (Hz) !! Constante !! Frecuencia (Hz) !! Constante !! Frecuencia (Hz)
|-
| NOTA_B0 || 31 || NOTA_A3 || 220 || NOTA_G6 || 1568
|-
| NOTA_C1 || 33 || NOTA_AS3 || 233 || NOTA_GS6 || 1661
|-
| NOTA_CS1 || 35 || NOTA_B3 || 247 || NOTA_A6 || 1760
|-
| NOTA_D1 || 37 || NOTA_C4 || 262 || NOTA_AS6 || 1865
|-
| NOTA_DS1 || 39 || NOTA_CS4 || 277 || NOTA_B6 || 1976
|-
| NOTA_E1 || 41 || NOTA_D4 || 294 || NOTA_C7 || 2093
|-
| NOTA_F1 || 44 || NOTA_DS4 || 311 || NOTA_CS7 || 2217
|-
| NOTA_FS1 || 46 || NOTA_E4 || 330 || NOTA_D7 || 2349
|-
| NOTA_G1 || 49 || NOTA_F4 || 349 || NOTA_DS7 || 2489
|-
| NOTA_GS1 || 52 || NOTA_FS4 || 370 || NOTA_E7 || 2637
|-
| NOTA_A1 || 55 || NOTA_G4 || 392 || NOTA_F7 || 2794
|-
| NOTA_AS1 || 58 || NOTA_GS4 || 415 || NOTA_FS7 || 2960
|-
| NOTA_B1 || 62 || NOTA_A4 || 440 || NOTA_G7 || 3136
|-
| NOTA_C2 || 65 || NOTA_AS4 || 466 || NOTA_GS7 || 3322
|-
| NOTA_CS2 || 69 || NOTA_B4 || 494 || NOTA_A7 || 3520
|-
| NOTA_D2 || 73 || NOTA_C5 || 523 || NOTA_AS7 || 3729
|-
| NOTA_DS2 || 78 || NOTA_CS5 || 554 || NOTA_B7 || 3951
|-
| NOTA_E2 || 82 || NOTA_D5 || 587 || NOTA_C8 || 4186
|-
| NOTA_F2 || 87 || NOTA_CS5 || 622 || NOTA_DS8 || 4435
|-
| NOTA_FS2 || 93 || NOTA_E5 || 659 || NOTA_D8 || 4699
|-
| NOTA_G2 || 98 || NOTA_F5 || 698 || NOTA_DS8 || 4978
|-
| NOTA_GS2 || 104 || NOTA_FS5 || 740 || ||
|-
| NOTA_A2 || 110 || NOTA_G5 || 784 || ||
|-
| NOTA_AS2 || 117 || NOTA_GS5 || 831 || ||
|-
| NOTA_B2 || 123 || NOTA_A5 || 880 || ||
|-
| NOTA_C3 || 131 || NOTA_AS5 || 932 || ||
|-
| NOTA_CS3 || 139 || NOTA_B5 || 988 || ||
|-
| NOTA_D3 || 147 || NOTA_C6 || 1047 || ||
|-
| NOTA_DS3 || 156 || NOTA_CS6 || 1109 || ||
|-
| NOTA_E3 || 165 || NOTA_D6 || 1175 || ||
|-
| NOTA_F3 || 175 || NOTA_DS6 || 1245 || ||
|-
| NOTA_FS3 || 185 || NOTA_E6 || 1319 || ||
|-
| NOTA_G3 || 196 || NOTA_F6 || 1397 || ||
|-
| NOTA_GS3 || 208 || NOTA_FS6 || 1480 || ||
|}
== Comentarios ==
* Puedes usar un potenciómetro de 10k en serie con una resistencia de 1k para controlar el volumen del altavos (parlante).
* El rango auditivo humano es de aprox 20 kHz
{| class="wikitable col1cen col2cen col3cen col4cen"
|+Rango de frecuencias depende de frecuencia de uC
|-
! Reloj uC !! Fmin con Temporizador 8 bits !! Fmin Temporizador de 16 bits !! Fmax
|-
| 8 MHz || 16 Hz || 1 Hz || 4 MHz
|-
| 16 MHz || 31 Hz || 1 Hz || 8 MHz
|}
== Advertencias ==
* Nunca conecte el pin Arduino directamente a una entrada de audio. El voltaje es considerablemente más alto que un voltaje de nivel de línea estándar y puede dañar las entradas de audio. Puede usar un divisor de tensión para adecuar la salida de Arduino a la entrada de audio.
* Si usa un altavoz (parlante) DEBE poner una resistencia de 1K en serie o dañada la salida del Arduino.
* Si asigna el Temporizador 0 afectara el uso [[analogWrite()|PWM]] y [[millis()]].
* La librería solo acepta números enteros positivos [[unsigned int]] como frecuencias. Osea la frecuencia máxima sera 65 535 Hz.
== Ejemplo 1 ==
Toque una nota de 4° octava A (440 Hz) en el pin 13.
<syntaxhighlight lang="c++">
#include <Tone.h>
Tone pito;
void setup(){
pito.begin(13);
pito.play(NOTE_A4);
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 2 ==
Escriba un boceto para leer una entrada analógica y asigne el resultado a un rango de 100 a 1000. Almacene el resultado en una variable local llamada frecuencia. Esta será la frecuencia que toque en el altavoz. Luego use el comando de [[tone()]] para configurar la frecuencia del altavoz en el pin digital 8 durante 10 ms.
<syntaxhighlight lang="c++">
void setup() {
//Nada
}
void loop() {
int frecuencia = analogRead(A0);
int valor = map(frecuencia, 200, 900, 100, 1000);
tone(8, valor, 10);
}
</syntaxhighlight>
== Ejemplo 3 ==
En telefonía, el sistema de marcación por tonos o DTMF (Dual-Tone Multi-Frequency) es usado para la señalización de telecomunicaciones sobre líneas telefónicas analógicas en la banda de frecuencia vocal entre teléfonos u otros equipos de comunicaciones y la central telefónica.
<syntaxhighlight lang="c++">
#include <Tone.h>
Tone freq1;
Tone freq2;
const int DTMF_freq1[] = { 1336, 1209, 1336, 1477, 1209, 1336, 1477, 1209, 1336, 1477 };
const int DTMF_freq2[] = { 941, 697, 697, 697, 770, 770, 770, 852, 852, 852 };
void setup(){
Serial.begin(9600);
freq1.begin(11);
freq2.begin(12);
}
void loop(){
uint8_t numero[] = {8, 6, 7, 5, 3, 0 , 9};
for (byte i=0; i<sizeof(numero); i++){
Serial.print(numero[i], 10);
playDTMF(numero[i], 500);
delay(600);
}
Serial.println();
delay(4000);
}
void playDTMF(uint8_t num, long duracion){
freq1.play(DTMF_freq1[num], duracion);
freq2.play(DTMF_freq2[num], duracion);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
[[Category:Librerias]]
22c5d9vlno3wofwws4er2jdloqqoutc
Tone keyboard
0
157
4663
3721
2019-07-07T01:01:04Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
== Código ==
<pre>
</pre>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Ejemplo Digital</categorytree>
== Referencias externas ==
[[Category:Ejemplo Digital]]
pmpxks59ujkjcr350mr9p5wpists1qc
Tone melody
0
158
4676
4675
2019-07-07T01:07:21Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
== Código ==
<pre>
</pre>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Ejemplo Digital</categorytree>
== Referencias externas ==
[[Category:Ejemplo Digital]]
pmpxks59ujkjcr350mr9p5wpists1qc
Tone múltiple
0
159
4681
4680
2019-07-07T01:09:17Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
== Código ==
<pre>
</pre>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Ejemplo Digital</categorytree>
== Referencias externas ==
[[Category:Ejemplo Digital]]
1v9i19jgpctozhitw3eglayaj8aj8i9
Tone pitch follower
0
160
4679
4678
2019-07-07T01:08:31Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
Este ejemplo muestra cómo usar el comando de [[tone()]] para generar un tono que sigue los valores de una entrada analógica que tiene conectada una fotorresistencia. Pase la mano sobre la fotoresistencia para variar los tonos.
== Circuito ==
Conecte un terminal de su altavoz al pin digital 9 (PWM) a través de una resistencia de 100 ohmios y su otro terminal a GND. Conecte su photoresistor entre +5V y el pin analógico A0 y añada una resistencia de 4K7 entre ese mismo pin analogico A0 y GND.
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(115200);
}
void loop() {
//Photoresistor entre 400~1000
int sensor = analogRead(A0);
Serial.println(sensor);
//Rango de sonido entre 120~1500 Hz
int toca = map(sensor, 400, 1000, 120, 1500);
tone(9, toca, 10);
delay(1);
}
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Ejemplo Digital</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/en/Tutorial/TonePitchFollower Ejemplos incluidos]
[[Category:Ejemplo Digital]]
3xmtnjtu5b267ekf8b9co9l8bz5ux8j
UDPSendReceiveString
0
163
4091
4090
2019-05-31T00:09:22Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
En este ejemplo, con Ethernet Shield y su Arduino podrá enviar y recibir cadenas de texto a través del protocolo UDP (Universal Datagram Packet). Necesitará otro dispositivo para enviar y recibir mensajes.
== Ejemplo ==
<syntaxhighlight lang="c++">
#include <Ethernet.h>
#include <EthernetUdp.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Asignar MAc al modulo
IPAddress ip(192, 168, 1, 177); //Asignar IP
unsigned int localPort = 8888; //Asignar puerto a escuchar
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; // buffer to hold incoming packet,
char ReplyBuffer[] = "acknowledged"; // a string to send back
EthernetUDP Udp; //Instanciar UDP
byte CS = 10; //Confugura CS para UNO
//byte CS = 15; //Confugura CS para ESP8266
//byte CS = 33; //Confugura CS para ESP32
//byte CS = 5; //Confugura CS para MKR
void setup() {
Serial.begin(9600);
Ethernet.init(CS);
Ethernet.begin(mac, ip); //Iniciar Ethernet
// Check for Ethernet hardware present
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
while (true) {
delay(1); //do nothing, no point running without Ethernet hardware
}
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
Udp.begin(localPort); //Inicializa UDP
}
void loop() {
// if there's data available, read a packet
int packetSize = Udp.parsePacket();
if (packetSize) {
Serial.print("Received packet of size ");
Serial.println(packetSize);
Serial.print("From ");
IPAddress remote = Udp.remoteIP();
for (byte i=0; i<4; i++) {
Serial.print(remote[i], DEC);
if (i < 3) {
Serial.print(".");
}
}
Serial.print(", port ");
Serial.println(Udp.remotePort());
// read the packet into packetBufffer
Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
Serial.println("Contents:");
Serial.println(packetBuffer);
// send a reply to the IP address and port that sent us the packet we received
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(ReplyBuffer);
Udp.endPacket();
}
delay(10);
}
</syntaxhighlight>
Para ejecutar con este ejemplo
<syntaxhighlight lang="c++">
// Processing UDP example to send and receive string data from Arduino
// press any key to send the "Hello Arduino" message
import hypermedia.net.*;
UDP udp; // define the UDP object
void setup() {
udp = new UDP( this, 6000 ); // create a new datagram connection on port 6000
//udp.log(true); // <-- printout the connection activity
udp.listen(true); // and wait for incoming message
}
void draw() {
//Nada
}
void keyPressed() {
String ip = "192.168.1.177"; // the remote IP address
int port = 8888; // the destination port
udp.send("Hello World", ip, port ); // the message to send
}
void receive( byte[] data ) { // <-- default handler
//void receive( byte[] data, String ip, int port ) { // <-- extended handler
for (byte i=0; i<data.length; i++)
print(char(data[i]));
println();
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria Ethernet</categorytree>
== Refrencias externas ==
[[Category:Libreria Ethernet]]
4nz5ekvgzmymjpb8000dp1o69dseasi
UNO
0
358
4969
4871
2019-09-26T16:10:44Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
Arduino '''UNO''' es la mejor placa para comenzar a usar la electrónica y la codificación. Si esta es tu primera experiencia jugando con la plataforma Arduino, la '''UNO''' es la placa más robusta, usada y documentada de la familia.
Esta basado en el uC ATmega328P de 8 bits a 16 MHz, perteneciente a la familia AVR de arquitectura RISC, 32 registros de trabajo, 3 temporizadores flexibles, UART serie, convertidos ADC de 14 canales de 10 bits. Encapsulado DIP de 28 pines.
== Características ==
{|class="wikitable"
|+Especificaciones técnicas
!Parámetro!!Valor
|-
|uC||ATmega328P
|-
|Bus||8 bits
|-
|Velocidad||16Mhz
|-
|Memoria [[flash]]||32KB (0.5KB para arranque)
|-
|Memoria [[SRAM]]||2KB
|-
|Memoria [[EEPROM]]||1KB
|-
|Alimentación||5V
|-
|Entrada||7~12V
|-
|Entrada limite||6~20V
|-
|Pines digitales||14 (6 PWM de 8 bits)
|-
|Pines analógicos||6
|-
|Corriente por pines||20 mA
|-
|[[LED_BUILTIN]]||13
|}
== Pines ==
;PWM: Algunos pines, marcados con un símbolo "~" en la placa, admiten [[analogWrite()|PWM]], es decir, impulsos rápidos que se pueden usar para controlar motores a varias velocidades o reproducir música (variando la frecuencia de pulso, modulación de ancho de pulso ). Son 3, 5, 6, 9, 10 y 11. Los pines 5 y 6 tienen una frecuencia de 980 Hz el resto de pines tienen una frecuencia de 490 Hz.
;USB: Universal Serial Bus. Se usa para comunicarse a través del protocolo USB con una computadora host (para programar o enviar / recibir datos en serie). Son Rx (0) y Tx (1), por lo que no se recomienda reasignarlos para otra función si requeriras usan el monitor serie por ejemplo.
;VCC: La línea de "potencia". Generalmente + 5V en el Arduino Uno.
;Vin: El voltaje en la placa. En general, esto será aproximadamente 0V7 menos que el voltaje suministrado la "clavija de alimentación" debido al diodo de protección de polaridad inversa. No se recomienda extraer energía de Vin si está alimentando el Arduino desde el puerto USB.
;5V:Fuente de maximo 50 mA
;3.3V:Fuente de maximo 50 mA
;GND:Tierra.
;RESET:Pin de reset
;IOREF:La referencia de tensión IO (conectada a + 5V). Destinado a permitir que los escudos (Sheeld) vean si la placa Arduino está funcionando a 5V o 3V3.
;AREF:Referencia de lectura analógica.
;ISCP:Esta placa Arduino posee una entrada ICSP (In Chip Serial Programmer) que tiene acceso a la memoria de programa del AVR (Flash), ésto es, que puede grabar directamente desde el PC al microcontrolador cualquier programa sin usar el puerto USB. Uno de ellos, el mismo Bootloader de Arduino.
;Interrupciones:Los pines digitales 2 y 3 corresponden a INT0 e INT1.
== Pines digitales ==
* Existen 14 pines digitales (0~13) que pueden ser configurados como entrada o salida digital.
* No debes meter o sacar mas de 40 mA en cada una.
* 6 de ellos están marcados con '''~''' y pueden ser usados como [[analogWrite()|PWM]].
* Deben ser previamente configurados con [[pinMode()]].
== Pines analógicos ==
* Los pines marcados A0~A5 se usan para hacer lecturas "analógicas" que son codificadas via un ADC.
* Usando la función [[analogRead()]] se obtiene lectura entre 0 (para 0V) y 1023 (para 5V). El rango puede alterarse mediante una programación adecuada y/o suministrando un voltaje diferente al pin '''AREF'''.
* Aquí puede poner alguna fuente de voltaje (de 0 a 5 V) como una "referencia de voltaje" precisa para las llamadas a la función [[analogRead()]].
* Los pines analógicos A0~A5 también pueden usarse para lectura/escritura digital. Para este propósito, puede referirse a ellos como pines 14 a 19.
<pre>
pinMode(19, OUTPUT);
digitalWrite(19, HIGH);
</pre>
== LEDs ==
* Tiene un LED incorporado llamado [[LED_BUILTIN]] en el pin digital 13. Cuando el pin 13 esta en HIGH prende.
* Dos LEDs de transmision serie Tx/Rx.
== Botones ==
* Tiene un botón reset.
* Adicionalmente tiene un pin RST que con un LOW reiniciar el microcontrolador. Normalmente se usa para agregar un botón de reinicio con los modulos que bloquean el botón incorporado.
== ICSP ==
* Exiten dos conectores ICSP uno conectado al ATmega328P y el otro al ATmega16U2.
* Se usa para programar el uC ATmega328P principal (el más común) o el procesador de interfaz USB ATmega16U2 (solo si es necesario).
* El sistema ICSP usa [[SPI]] con un protocolo integrado en los chips.
{|class="wikitable"
!pin!!Descripcion
|-
|1||MISO
|-
|2||5V
|-
|3||SCK
|-
|4||MOSI
|-
|5||RST
|-
|6||GND
|}
{{Nota|La programación también se realiza normalmente utilizando la interfaz serie asíncrona (pines D0 / D1) y un programa de gestor de arranque instalado.}}
== Puerto serie ==
Los pines 0 (Rx) y 1 (Tx) se pueden usar para comunicaciones serie asíncronas.
Estos pines también están conectados internamente a través de resistencias de 1K al chip USB, de modo que los datos de la interfaz USB se pueden enviar/recibir a los pines 0 y 1.
{{Nota|La libreria [[SoftwareSerial]] permite la comunicación en serie por cualquiera de los pines digitales del Nano.}}
== Bus I2C ==
Un protocolo '''Inter Integrated Circuit''' (también llamado TWI) usa una línea de reloj (SCL) junto con una línea de datos (SDA) para transferir información. Reloj serie
;SCL (Serial Clock Line): La línea de reloj. Pin A5. Usada por I2C para indicar datos está lista en la línea de datos.
;SDA (Serial Data Line): La línea de datos (bidireccional). Pin A4. Usada para datos seriales.
{{Nota|Para saber mas consulta la libreria [[Wire]].}}
== Bus SPI ==
Un protocolo '''Serial Peripheral Interface''' usa una línea de reloj (SCK) junto con datos de maestro a esclavo (MOSI) y esclavo a maestro (MISO) para transferir información. También se usa comúnmente una línea de selección de esclavos (SS) para seleccionar un esclavo de entre múltiples.
;SCK (Serial Clock): Pin 13. Una línea de reloj generada por el maestro para "reloj" de datos al esclavo.
;MOSI (Master Out, Slave In): Pin 12. Los datos van del maestro al esclavo.
;MISO (Master In, Slave Out): Pin 11. Los datos van del esclavo al maestro.
;SS (Slave Select): Pin 10. Usado para seleccionar un esclavo. Típicamente se baja para estar activo.
{{Nota|Revisa la libreria [[SPI]] para saber como usarlo.}}
== Rangos máximos ==
Los pines IO tienen una calificación máxima absoluta de 40 mA por pin. Sin embargo, en la práctica, debe diseñar para que una clasificación de 20 mA sea segura.
Además, los siguientes grupos de pines no deben hundirse más de 100 mA (cada grupo):
* Pines digitales del D0 a D4
* Pines digitales del D5 al D13
* Pines analógicos del A0 a A5
{|class="wikitable col1cen"
|+Banco de puertos ATmega328p
!Puerto!!2<sup>7</sup>!!2<sup>6</sup>!!2<sup>5</sup>!!2<sup>4</sup>!!2<sup>3</sup>!!2<sup>2</sup>!!2<sup>1</sup>!!2<sup>0</sup>
|-
|B||||||D13||D12||D11||D10||D9||D8
|-
|C||||||A5||A4||A3||A2||A1||A0
|-
|D||D7||D6||D5||D4||D3||D2||D1||D0
|-
!Puerto!!128!!64!!32!!16!!8!!4!!2!!1
|}
Además de eso, todo el chip del procesador tiene una calificación máxima de consumo de corriente de 200 mA.
Estas cifras generalmente se refieren a los pines en el modo de salida (el modo de entrada no consumirá mucha potencia). De modo que puede ver que, configurados como salidas, solo podría tener 10 pines que suministran 20 mA cada uno (para evitar exceder el máximo del chip) e incluso entonces tendrían que extenderse para que no consuma más de 100 mA de un grupo mencionado anteriormente.
== Resistencias limitadoras de corriente ==
* Como regla general, si conecta un LED a un pin digital configurado como salida, querrá algo así como una resistencia de 330 ohm en serie con el diodo. * Esto se debe a que desea extraer algo así como 10 mA de corriente, con una caída de voltaje de 3V3 (el diodo cae 1V7, por lo que la resistencia suelta los otros 3V3 de un suministro de 5V). Usando la ley de Ohms, 3.3 / 0.010 = 330 ohmios.
{{Nota|Incluso una resistencia de 1K proporciona una salida de LED razonablemente brillante, y solo consume alrededor de 3.3 mA.}}
== Fuente de alimentación ==
La placa se puede alimentar desde el conector USB para probar mientras está conectado a una computadora o con una fuente de 5V.
Si usa un suministro externo, se recomienda un rango de voltaje entre 7~12V (por ejemplo, se podría usar una batería de 9V). Use la clavija.
Tenga en cuenta que cuanto mayor sea el voltaje, más trabajo debe hacer el regulador de voltaje para "tirar" el exceso de voltaje, de modo que con un suministro de 12V o mas y alimentando bastantes "periféricos", es probable que el regulador de voltaje se caliente.
Por otro lado, el circuito interno está diseñado para cambiar de USB a externo si el suministro externo excede 6V6, por lo que el suministro de mucho menos de 7V probablemente no funcionará correctamente.
== Polifusible ==
El Arduino UNO R3 tiene un polifusible reseteable que protege el puerto USB (pin 1 de +5V) de su computadora contra cortos y sobrecargas. Si se extrae más de 500 mA del puerto USB, el fusible se cortara automáticamente hasta que se elimine el cortocircuito o la sobrecarga. Tipo MSMF050-2.
== Vea también ==
* [[MINI]]
* [[MICRO]]
* [[NANO]]
* [[MEGA]]
* [[DUE]]
* [[101]]
* [[LEONARDO]]
* [[MKR1000]]
* [[NodeMCU]] - ESP8266
== Referencias externas ==
* [https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf Esquema]
* [https://www.arduino.cc/en/Hacking/Atmega168Hardware ATmega168 pin mapping] - Arduino
* [http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf Datasheat 328P] - Microchip
* [http://www.gammon.com.au/uno Arduino UNO] - Nick Gammon
* [https://www.luisllamas.es/esquema-de-patillaje-de-arduino-pinout/ Esquema de patillaje de Arduino] - Luis Llamas
* [http://manueldelgadocrespo.blogspot.com/p/modelos_29.html Modelos de Arduino] - Manuel Delgado
* [https://descubrearduino.com/elegir-la-placa-arduino-adecuada-para-tu-proyecto-una-introduccion/ Que modelo comprar] - Descubre Arduino
* [https://aprendiendoarduino.wordpress.com/2016/11/06/hw-arduino-a-fondo/ Arduino a fondo] - Enrique Crespo
* [http://diymakers.es/guia-arduino/ Guia Arduino] - Diy Makers
[[Category:Placas]]
oqwk6lmh0pf35cf3yj342wkfr9f9yye
Variables
0
3
5246
5245
2020-02-04T01:34:54Z
Kike GL
2
/* Constantes */
wikitext
text/x-wiki
Una variable es una palabra que representa un espacio de memoria que fue reservado expresamente durante su '''declaracion''' asignándole un tipo de dato. Al mismo tiempo o posteriormente se puede '''inicializar''' con un valor dicha variable.
<pre>
tipo nombre [= valor];
</pre>
== Alcance o ámbito ==
Las variables en el lenguaje de programación C++, que usa Arduino, tienen una propiedad llamada '''ámbito'''. Esto está en contraste con las primeras versiones de lenguajes de programación como BASIC, donde todas las variable siempre son del tipo [[variable publica|global]].
* Una variable [[variable publica|global]] es aquella que puede ser vista por cada función en un [[boceto]]. En el entorno Arduino, cualquier variable declarada fuera de una función (por ejemplo, [[setup()]], [[loop()]] o función de usuario), es una variable global.
* Las variables '''locales''' solo son visibles para la función en la que están declaradas.
Cuando un [[boceto]] comienza a hacerse más grande y complejo, las [[variable local|variables locales]] son una forma útil de asegurar que cada función tenga acceso a sus propias variables. Esto evita errores de programación cuando una función modifica inadvertidamente variables usadas por otra función.
También es útil a veces '''declarar e inicializar''' una variable dentro de un bucle [[for]]. Esto crea una variable a la que solo se puede acceder desde dentro de las llaves del bucle [[for]].
== Tipos de dato ==
Estos son los tipos de datos que usa Arduino.
{|class="wikitable"
|+Tipos de dato en Arduino
!Tipo!!Ocupa!!Rango
|-
|[[char]]||1 byte (8 bits)||-128 a 127
|-
|[[byte]]||1 byte (8 bits)||0 a 255
|-
|[[int]]||2 byte (16 bits)||-32,768 a 32,767
|-
|[[unsigned int]] o [[word]]||2 byte (16 bits)||0 a 65,535
|-
|[[long]]||4 byte (32 bits)||-2,147,483,648 a 2,147,483,647
|-
|[[unsigned long]]||4 byte (32 bits)||0 a 4,294,967,295
|-
|[[float]]||4 byte (32 bits)||-3.4E38 a 3.4E38
|}
=== Numéricos ===
* [[char]]
* [[byte]]
* [[int]]
* [[unsigned int]]
* [[long]]
* [[unsigned long]]
* [[float]]
* [[double]] - solo [[MEGA]]
* [[word]]
=== Fecha y hora ===
* [[time_t]] - TimeLib.h
* [[tmElements_t]] - TimeLib.h
* [[DateTime]] - RTClib.h
{{Nota|Si usas la librería TimeLib.h puedes usar los tipos: '''time_t''' y '''tmElements_t'''}}
=== Caracteres ===
* [[string]] - matriz
* [[String]] - clase
=== Otros ===
* [[bool]]
* [[void]]
== Utilidades ==
* [[sizeof()]]
* [[PROGMEM]]
* [[F()]]
* [[EEPROM]]
== Calificadores ==
En ocaciones es necesario calificar una variable de modo que le indicas en que tipo de memoria deberá ser almacenada: [[flash]], [[SRAM]] o [[EEPROM]].
* [[const]]
* [[static]]
* [[volatile]]
* [[extern]]
* [[define|#define]]
== Matrices ==
La [[matriz]] o array es un tipo especial de variable múltiple. Puede ser uni o bidimencional.
<pre>
tipo matriz[] = {valor1, valor2...};
tipo matriz[][n] = {valor11, valor12...},{valor21, valor22...}...;
</pre>
{{Nota|Si la matriz en '''bidimencional''' NO puede dejar de expresar el segundo vector}}
== Palabras reservadas ==
Estas son palabra reservadas que tiene un significado especial y no pueden ser usadas como nombres de variable:
<categorytree mode=all>Palabras reservadas</categorytree>
* [[MSBFIRST / LSBFIRST]]
{{Nota|En el [[IDE]] veras que estas palabras se pintan de color azul si están bien escritas.}}
== Vea también ==
* [[Estructura]]
* [[Funciones]]
== Referencias ==
* [https://aprendiendoarduino.wordpress.com/2017/06/21/arrays-y-strings-2/ Arrays y string] - Enrique Crespo
[[Category:Referencias]]
qw721tk4vy2ekg0lvtvi05zaq4h1l16
Virtual color mixer
0
242
3752
1012
2019-05-06T22:14:55Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Comunicaciones</categorytree>
== Referencias ==
[[Category:Comunicaciones]]
d8atefw72kf74bl7caf89mtyl0c79fx
WebClient
0
142
4084
4083
2019-05-30T23:03:08Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Este ejemplo muestra cómo hacer una solicitud HTTP usando un modulo (sheald) de Ethernet. Devuelve una búsqueda en Google del término "Arduino". Los resultados de esta búsqueda se envían por monitor serie de Arduino.
== Codigo ==
<syntaxhighlight lang="c++">
#include <SPI.h>
#include <Ethernet.h>
//Ethernet shield attached to pins 10, 11, 12, 13
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //MAC del modulo
IPAddress ip(192, 168, 0, 177); //IP del modulo
char server[] = "www.google.com"; //Google (usar DNS)
//IPAddress server(74,125,232,128); //IP de Google (no usar DNS)
EthernetClient client; //Iniciar cliente
void setup() {
Serial.begin(9600);
// start the Ethernet connection:
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// try to congifure using IP address instead of DHCP:
Ethernet.begin(mac, ip);
}
// give the Ethernet shield a second to initialize:
delay(1000);
Serial.println("connecting...");
// if you get a connection, report back via serial:
if (client.connect(server, 80)) {
Serial.println("connected");
// Make a HTTP request:
client.println("GET /search?q=arduino HTTP/1.1");
client.println("Host: www.google.com");
client.println("Connection: close");
client.println();
}else {
// if you didn't get a connection to the server:
Serial.println("connection failed");
}
}
void loop() {
// if there are incoming bytes available
// from the server, read them and print them:
if (client.available()) {
char c = client.read();
Serial.print(c);
}
// if the server's disconnected, stop the client:
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
// do nothing forevermore:
while (true);
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria Ethernet</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Reference/EthernetClient Ethernet Client]
[[Category:Ejemplos]]
[[Category:Libreria Ethernet]]
ld5hdvya06yxgpdsiml7bp46si3dgh3
WebClientData
0
488
4911
4910
2019-09-19T16:03:14Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
Este ejemplo muestra cómo hacer un envio de datos hacia un servidor Xampp (Apache + MySQL)
== Código Arduino ==
<syntaxhighlight lang="c++">
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {0xDE,0xAD,0xBE,0xEF,0xFE,0xED};
IPAddress server(192,168,0,20);
EthernetClient client;
int pot;
void setup() {
Serial.begin(9600);
if (Ethernet.begin(mac) == 0) {
Serial.println("Fallo la configuracion DHCP");
//Hacerlo para siempre
for(;;)
;
}
delay(1000);
Serial.println("conectando...");
if (client.connect(server, 80)) {
Serial.println("conectado");
//Requerimiento:
client.print("GET /arduino/mysql.php?valor=");
pot = analogRead(A0);
client.print(pot);
client.println(" HTTP/1.0″);
//client.println("GET /arduino/ethernet.php HTTP/1.0");
client.println();
} else {
Serial.println("Fallo la coneccion");
}
}
void loop(){
//Si hay un cliente imprime sus datos
if (client.available()) {
char c = client.read();
Serial.print(c);
}
//Si el servidor se desconecta, para cliente
if (!client.connected()) {
Serial.println();
Serial.println("desconectando...");
client.stop();
//Hacerlo para siempre
for(;;)
;
}
}
</syntaxhighlight>
== Código PHP ==
<syntaxhighlight lang="PHP">
$db = 'tiempos';
$mysqli = new mysqli('localhost', 'Usuario', 'Clave', $db) OR exit('Fallo al conectar a MySQL o BD');
$sql = 'INSERT INTO tabla1 SET val='. $_REQUEST['valor'];
//echo $sql;
$res = $mysqli->query($sql) OR exit('Revisa el query<p>'. $sql);
if ($mysqli->affected_rows != 1){
echo 'Error...';
}
//Cierra conexión
$mysqli->close();
</syntaxhighlight>
== MySQL ==
{| class="wikitable"
|+Campos de tabla1
|-
!Nombre!!Tipo!!Comentario
|-
|id||int(11)||Auto_Incremet
|-
|val||varchar(4)||
|-
|fecha||datetime||Current_timestamp
|}
== Vea también ==
<categorytree mode=all>Libreria Ethernet</categorytree>
== Referencias externas ==
* [http://panamahitek.com/conectar-arduino-base-datos-mysql/ Conectar Arduino con MySQL] - Panama Hitek
* [https://www.rinconingenieril.es/arduino-ethernet-y-mysql/ Arduino a MySQL] - Rincon Ingenieril
* [https://www.apachefriends.org/es/index.html Apache + MySQL + PHP] - Apache friends
[[Category:Ejemplos]]
[[Category:Libreria Ethernet]]
rgcb4gg7g9mj8asw0jzb7tqt8ap11eq
WebClientRepeating
0
143
4079
4078
2019-05-30T22:55:13Z
Kike GL
2
/* Codigo */
wikitext
text/x-wiki
Este ejemplo muestra cómo realizar solicitudes HTTP repetidas utilizando un escudo Ethernet. Este ejemplo utiliza DNS, asignando al cliente Ethernet una dirección MAC, una dirección IP y una dirección DNS. Se conecta a http://www.arduino.cc/latest.txt. El contenido de la página se puede ver a través de la ventana serie de Arduino.
== Codigo ==
<syntaxhighlight lang="c++">
#include <SPI.h>
#include <Ethernet.h>
//Ethernet shield attached to pins 10, 11, 12, 13
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //Asigna una MAC al modulo
IPAddress ip(192, 168, 1, 177); //Asigna un IP libre
IPAddress myDns(1, 1, 1, 1); //Asigna tu servidor DNS
EthernetClient client; //Inicializa cliente
char server[] = "www.arduino.cc";
//IPAddress server(64,131,82,241);
unsigned long lastConnectionTime = 0; //Ultima conexion
const unsigned long postingInterval = 10L * 1000L; //Retardo entre actualizaciones
void setup() {
Serial.begin(9600);
delay(1000);
Ethernet.begin(mac, ip, myDns); //Inicia conexion Ethernet
Serial.print("Mi direccion IP: ");
Serial.println(Ethernet.localIP());
}
void loop() {
if (client.available()) {
char c = client.read();
Serial.write(c);
}
if (millis() - lastConnectionTime > postingInterval) {
httpRequest();
}
}
void httpRequest() {
client.stop(); //Cierra conexion y libera socket
if (client.connect(server, 80)) {
Serial.println("conectando...");
client.println("GET /latest.txt HTTP/1.1"); //Envia requerimiento HHTTP GET
client.println("Host: www.arduino.cc");
client.println("User-Agent: arduino-ethernet");
client.println("Connection: close");
client.println();
lastConnectionTime = millis();
}else{
Serial.println("conexion fallo.");
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria Ethernet</categorytree>
== Referencias externas ==
* [http://www.arduino.cc/en/Tutorial/WebClientRepeating Web Client Repeating]
[[Category:Ejemplos]]
[[Category:Libreria Ethernet]]
bf3d85810fghv8fotatjvxnsvo6c413
WebServer
0
162
4097
4092
2019-05-31T00:39:26Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
En este ejemplo, con Ethernet Shield y Arduino se crea un servidor web simple. Con la biblioteca Ethernet, su dispositivo podrá responder a una solicitud HTTP. Después de abrir un navegador y navegar a la dirección IP de su escudo Ethernet, su Arduino responderá con HTML para que un navegador muestre los valores de entrada de los seis pines analógicos.
== Ejemplo ==
<syntaxhighlight lang="c++">
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Asignar MAC al modulo
IPAddress ip(192, 168, 1, 177); //Asignar IP al servidor
//Ethernet shield attached to pins 10, 11, 12, 13
//Analog inputs attached to pins A0 through A5 (optional)
EthernetServer server(80); //Inicializa Ethernet
void setup() {
Serial.begin(9600);
Serial.println("Ejemplo Servidor Web");
Ethernet.begin(mac, ip); //Inicializa Ethernet
// Check for Ethernet hardware present
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Modulo Ethernet no encointrado. No podemos hacer nada sin hardware.");
while (true) {
delay(1); //do nothing, no point running without Ethernet hardware
}
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Conecta el cable RJ-45 en el modulo.");
}
server.begin(); //Inicializa servidor
Serial.print("El servidor este en IP: ");
Serial.println(Ethernet.localIP());
}
void loop() {
EthernetClient client = server.available(); //Esperando algún cliente
if (client) {
Serial.println("Nuevo cliente");
boolean blanco = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n' && blanco) {
client.println("HTTP/1.1 200 OK"); //Envia respuesta estandar
client.println("Content-Type: text/html");
client.println("Connection: close"); //Cierra la conexion luego de completar
client.println("Refresh: 5"); //Refresca pagina automaticamente cada 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html><body>");
//Lee todo los puertos análogos
for (byte pin=0; pin<6; pin++) {
int sensorReading = analogRead(pin);
client.print("analog input ");
client.print(pin);
client.print(" is ");
client.print(sensorReading);
client.println("<br />");
}
client.println("</body></html>");
break;
}
if (c == '\n') {
blanco = true;
}else if (c != '\r') {
blanco = false;
}
}
}
delay(1);
client.stop(); //Cierra conexion del cliente
Serial.println("cliente desconectado.");
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria Ethernet</categorytree>
== Referencias ==
[[Category:Ejemplos]]
[[Category:Libreria Ethernet]]
ezc1ku0axy0ec59cb2z3u8v3ua5ewh2
While statement conditional
0
249
3758
1083
2019-05-06T22:18:05Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
Algunas veces quiere que todo en el boceto se detenga mientras una condición dada es verdadera. Puedes hacer esto usando un bucle [[while]]. Este ejemplo muestra cómo usar un bucle [[while]] para calibrar el valor de un sensor analógico.
En el bucle principal, del siguiente boceto lee el valor de una fotorresistencia en el pin analógico A0 y lo usa para prender un LED en el pin 9. Pero mientras se presiona un botón conectado al pin digital 2, el boceto ejecuta una funcion de usuario llamado '''calibra()''' que busca los valores más altos y más bajos del sensor analógico. Cuando sueltas el botón, el boceto continúa con el ciclo principal.
{{Nota|Esta técnica le permite actualizar los valores máximos y mínimos para el fotoresistor cuando cambian las condiciones de iluminación.}}
== Placa aplicable ==
Todas.
== Código ==
<syntaxhighlight lang="c++">
const byte sensor = A0;
const byte pulsador = 2;
const byte led = 9;
//Valores sensor
int min = 511;
int max = 512;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(led, OUTPUT);
pinMode(pulsador, INPUT_PULLUP);
}
void calibra() {
digitalWrite(LED_BUILTIN, HIGH); //Prende modo calibracion
int actual = analogRead(sensor); //Lee sensor:
//Guarda maximo
if (actual > max) {
max = actual;
}
//Guarda minimo
if (actual < min) {
min = actual;
}
}
void loop() {
//Mientras esta pulsado calibramos sensor
while (digitalRead(pulsador) == LOW) {
calibra();
}
digitalWrite(LED_BUILTIN, LOW); //Fin modo calibración
int actual = analogRead(sensor); //Lee sensor
//Aplica calibración de sensor
sensorValue = map(actual, min, max, 0, 255);
sensorValue = constrain(sensorValue, 0, 255); //Restringe rango
analogWrite(led, sensorValue); //PWM al LED externo
}
</syntaxhighlight>
== Comentarios ==
== Vea también ==
<categorytree mode=all>Estructuras de control</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Tutorial/WhileStatementConditional Ejemplos incluidos]
[[Category:Estructuras de control]]
n6igkhs9fyoy7qpq2mgc42iqf34uxr9
WiFi
0
120
5278
4895
2020-03-16T17:19:11Z
Kike GL
2
/* Descripción */
wikitext
text/x-wiki
== Descripción ==
La librería [https://github.com/arduino-libraries/WiFi WiFi] de Arduino...
{{Tip|Librería oficial, es decir que está preinstalada junto con la IDE de Arduino, no es necesario descargarla.}}
== Placas aplicables ==
== Sintaxis ==
<pre>
</pre>
== Métodos ==
{|class="wikitable"
|+Metodos WiFi
!Metodo!!Descripcion
|-
|ping(ip)||
|-
|begin(ip, ttl)||
|}
== Comentarios ==
== Advertencias ==
== Ejemplo ==
Con este ejemplo logras prender y apagar un LED desde la pagina web alojada en el nodeMCU.
<syntaxhighlight lang="c++">
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
const char* ssid = "MIRED"; //Nombre SSID
const char* password = "12345678"; //Clave
IPAddress local_ip(192,168,2,100);
IPAddress gateway(192,168,2,1);
IPAddress subnet(255,255,255,0);
ESP8266WebServer server(80);
bool LEDstatus = LOW;
void setup() {
Serial.begin(9600);
pinMode(D5, OUTPUT);
WiFi.softAP(ssid, password);
WiFi.softAPConfig(local_ip, gateway, subnet);
delay(100);
server.on("/", handle_OnConnect);
server.on("/ledon", handle_ledon);
server.on("/ledoff", handle_ledoff);
server.onNotFound(handle_NotFound);
server.begin();
Serial.println("Servido HTTP iniciado");
}
void loop() {
server.handleClient();
if (LEDstatus){
digitalWrite(D5, HIGH);
}else{
digitalWrite(D5, LOW);
}
}
void handle_OnConnect() {
LEDstatus = LOW;
server.send(200, "text/html", SendHTML(false));
}
void handle_ledon() {
LEDstatus = HIGH;
server.send(200, "text/html", SendHTML(true));
delay(3000);
LEDstatus = LOW;
}
void handle_ledoff() {
LEDstatus = LOW;
server.send(200, "text/html", SendHTML(false));
}
void handle_NotFound(){
server.send(404, "text/plain", "Not found");
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduinolibraries.info/libraries All Libraries]
* [http://www.arduino.cc/en/Reference/WiFi WiFi]
* [https://programarfacil.com/blog/arduino-inalambrico/ Arduino Inalambrico] - Luis Del Valle
[[Category:Librerias]]
2vjo72x76fyvs17eqkpyqkeo20dvgp3
Wire
0
114
4764
4536
2019-07-15T22:24:27Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
La librería '''Wire.h''' estandar de Arduino le permite comunicarse con dispositivos por bus '''I2C''' (Inter-Integrated Circuit o 2 alambres). Usa dos lineas: SDA (datos) y SCL (reloj). Une los GND.
El bus I2C es extremadamente útil para conectar múltiples dispositivos, ya que todos pueden compartir los mismos dos cables (más la tierra claro). Esto se debe a que los dispositivos son "direccionables". Cada dispositivo debe tener una dirección única en el rango de 8 a 119. La dirección 0 está reservada como una dirección de "transmisión", las direcciones 1 a 7 están reservadas para otros fines y las direcciones 120 a 127 están reservadas para uso futuro.
Debido a esto puede tener una pantalla LCD en la dirección 10, otro arduino en la direccion 11 y un sensor en la direccion 12.
{{Nota|A partir de Arduino 1.0, la biblioteca hereda de la clase [[Stream]], lo que la hace compatible con otras bibliotecas de lectura/escritura. Debido a esto, send() y receive() han sido reemplazados por read() y write().}}
== Placas aplicables ==
{| class="wikitable col2cen col3cen"
!Arduino!!Pin SDA!!Pin SCL
|-
||UNO, Ethernet||A4||A5
|-
||MEGA||20||21
|-
||Leonardo||2||3
|-
||Debido||20||21
|}
{{Nota|A diferencia de la mayoría de los Arduinos, el '''ESP8266''' no tiene un hardware TWI, por lo que I²C esta implementado por software. Esto significa que puedes usar cualquier pin GPIO. De forma predeterminada, Wire.begin() asignara los pines 4 (SDA) y 5 (SCL), pero puede especificar otros pines usando Wire.begin(SDApin, SCLpin).}}
== Sintaxis ==
<pre>
#include <Wire.h>
Wire.begin();
</pre>
== Métodos ==
{| class="wikitable"
|+Metodos disponible librería Wire.h
|-
! Métodos !! Descripción
|-
|Wire.begin(num) o Wire.begin(SDApin, SCLpin)||Inicie la libreria Wire y únase al bus I2C como maestro o esclavo. Esto normalmente debería llamarse solo una vez. En caso de varios esclavos es importante numerarlos (8~119).
|-
|Wire.beginTrasnmission(num)||Comience una transmisión al dispositivo esclavo '''num'''. Posteriormente, coloque los bytes en cola para la transmisión con la función Wire.write() y transmítalos llamando a Wire.endTransmission().
|-
|Wire.read()||Lee un byte de dato desde el buffer que envío un maestro.
|-
|Wire.write(dato, longitud)||Pone en el buffer del maestro un byte de datos para ser transmitido a un esclavo.
|-
|Wire.onReceive(evento)||Interrupción para recibir datos. Evento es una función de usuario.
|-
|Wire.onRequest(evento)||Interrupción para transmitir datos. Evento es una función de usuario.
|-
|Wire.endTransmission()||Termina comunicación y libera pines. Devuelve 0 si la transmisión tubo éxito.
|}
== Proceso ==
# La transmisión empieza con la "condición de inicio", esto es cuando SDA esta en LOW y SCL esta en HIGH.
# La direccion consta de 7 bits esta desplazada al MSB. De modo que el LSB tendra 0 = escritura o 1 = lectura (maestro a esclaveo).
# Luego, el maestro espera a que el esclavo tire de la línea SDA a LOW, lo cual es un ACK (confirmación) de que existe un esclavo en esa dirección y está listo para recibir datos. Si no hay ningún esclavo conectado y encendido o si no tiene la dirección requerida, ignorará la preticion, dejando la línea SDA HIGH. Esto cuenta como un NAK (reconocimiento negativo).
# Luego se transmite el [[byte]] de datos, el bit más significativo (MSB) primero.
# Después de los 8 bits de datos, el maestro verifica que el esclavo confirma tirando de la línea SDA LOW. Así, se reconoce cada byte.
# La transmisión finaliza con la "Condición de parada", esto es cuando SDA esta en HIGH y SCL esta en HIGH.
== Velocidad de reloj ==
Se puede varias la velocidad de reloj así:
{| class="wikitable col1cen col2cen col3cen"
|-
! TWBR !! Pre-escaler !! Frecuencia !! Comentario
|-
| 12 || 1 || 400 kHz || Maxima soportada
|-
| 32 || 1 || 200 kHz ||
|-
| 72 || 1 || 100 kHz || Default
|-
| 152 || 1 || 50 kHz ||
|-
| 78 || 4 || 25 kHz ||
|-
| 158 || 4 || 12.5 kHz ||
|}
Para configurar el pre-escaler en 4 (12.5 kHz):
<pre>
Wire.begin();
TWBR = 158;
TWBR |- bit (TWPS0);
</pre>
== Direcciones ==
* Las direcciones I2C son de 7 bits para identificar a los esclavos ya que el 8vo bit determina si se está escribiendo o leyendo.
* Con 7 bits se puede obteniendo direcciones entre 0~127. Sin embargo, las direcciones de 0~7 y 120~127 están reservados.
* En caso de tener mas de un esclavo se deben numerar (8~119) con Wire.begin(num_esclavo) y para transmitir el maestro debe identificar con Wire.begin Transmission(num_esclavo). 0 = todos los esclavos.
* Si ve una dirección mayor que 127 (0x7F), entonces esa es la dirección de 8 bits, que incluye el LSB (lectura/escritura). Debe dividir esa dirección de 8 bits entre dos y desplazar una posición a la derecha () para obtener la dirección correcta para la biblioteca de '''Wire'''. Por ejemplo, si una hoja de datos dice usar la dirección 192 (0xC0) para escribir y 193 (0xC1) para leer, esa es una dirección de 8 bits. Divida 192 entre dos y la dirección "real" sera 96 (0x60).
== Comentarios ==
La libreria estándar de I2C para Arduino es '''Wire'''. Si bien esta libreria es suficiente la mayor parte del tiempo cuando desea comunicarse con dispositivos, hay situaciones en las que no es aplicable:
* Los pines de I2C (SDA/SCL) ya están en uso para otros fines,
* el código se ejecutará en un procesador ATtiny con 1 MHz en pines arbitrarios,
* tiene poca memoria (flash y RAM), o
* no desea usar las resistencias de activación habilitadas implícitamente porque sus dispositivos se ejecutan con 3 voltios.
Se adapto la libreria I2C de Peter Fleury que está escrito en ensamblador AVR, de peso extremadamente ligero (< 500 bytes de flash) y muy rápido. Incluso con un ATtiny de 1 MHz, uno todavía puede operar el bus con 33 kHz, lo que implica que puede controlar dispositivos esclavos que usan el protocolo SMBus (tiempo de espera si la frecuencia del bus es inferior a 10 kHz).
Si desea que se ejecute una solución en una MCU ARM (Due, Zero, Teensy 3.x), desea usar los pines en el puerto H o superior en un ATmega256, o si desea usar muchos buses I2C diferentes, esta biblioteca no es la solución adecuada para usted. En estos casos recomiendo [https://github.com/felias-fogg/SlowSoftI2CMaster SlowSoftI2CMaster], otra libreria I2C escrita en C++.
{{Nota|Recuerde que Arduino UNO R3 tiene I2C dedicado adicional en los pines debajo del USB.}}
== Advertencias ==
* Las direcciones I2C son de 7 bits para identificar a los esclavos ya que el 8vo bit determina si se está escribiendo o leyendo.
* Con 7 bits se puede obteniendo direcciones entre 0~127. Sin embargo, las direcciones de 0~7 y 120~127 están reservados.
* En caso de tener mas de un esclavo se deben numerar (8~119) con Wire.begin(num_esclavo) y para trasnmitir el maestro debe indentificar con Wire.begin Transmission(num_esclavo). 0 = todos los esclavos.
* Si tienes mas de un esclavo o usa cables largos, hay que poner un 4k7 como pull-up en cada linea SDA/SCL.
* No olvide conectar también todos los GND.
* El buffer es de 32 bytes.
{{Nota|Recuerde que se transmite un byte a la vez, por lo que para transmitir un int (2 byte) o un long (4 bytes) se debera hechar mano a las funciones lowByte(), highByte(), bitshift left (<nowiki><<</nowiki>), bitshift right (<nowiki><>></nowiki>), asi como los operadores bit a bit compuestos como: <nowiki>|=</nowiki>, <nowiki>&=</nowiki>, <nowiki>>>=</nowiki>, <nowiki><<=</nowiki>; tanto en el emisor como el receptor.}}
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
#include <Wire.h>
byte valor = 0 ;
void setup() {
Wire.begin(); //unirse al bus i2c (dirección opcional para el maestro)
TWBR = 12; //Aumenta velocidad de reloj 4 veces
}
void loop() {
Wire.beginTransmission(44); //transmitir al dispositivo N° 44 (0x2c)
//la dirección del dispositivo se especifica en la hoja de datos
Wire.write(byte (0x00)); //envía un byte de instrucción
Wire.write(valor); //envía el valor del potenciómetro Byte
if (Wire.endTransmission() == 0){ //deja de transmitir, 0 es exito
val ++; //incrementa el valor
if (valor == 64){ //si se alcanza la posición 64 (max)
valor = 0 ; //comienza desde el valor más bajo
}
}else{
//Error
}
delay(500) ;
}
</syntaxhighlight>
== Ejemplo 2 ==
Conectar dos Arduinos y que el maestro envie una secuencia y el esclavo la ejecute. En este caso usaremos 3 LED en los pines 11, 12 y 13 del esclavo. En el maestro ponemos este código.
<syntaxhighlight lang="c++">
#include <Wire.h>
const byte pin[] = {11, 12, 13};
byte estado = 0;
void setup() {
Wire.begin(); //Iniciamos maestro
}
void loop() {
for (byte i=0; i<3; i++){
Wire.beginTransmission(1); //Nos queremos comunicar con el esclavo 1
Wire.write(pin[i]); //Enviamos primer byte, será el pin a encender
Wire.write(estado); //Enviamos segundo byte, sera el estado 0/1
Wire.endTransmission(); //Paramos la transmisión
delay(1000);
}
if (estado == 0){
estado = 1;
}else{
estado = 0;
}
}
</syntaxhighlight>
Para el '''esclavo''' tendremos:
<syntaxhighlight lang="c++">
#include <Wire.h>
void setup() {
Serial.begin(9600);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
Wire.begin(1); //Unimos este dispositivo al bus I2C con dirección 1
Wire.onReceive(recive); //Evento a ejecutar al detectar recepcion
}
void loop() {
delay(100);
}
//Función que se ejecuta cada Wire.endTransmission() del maestro para recibir lo que manda con Wire.write().
void recive() {
byte pin = 0;
byte estado = 0;
if (Wire.available() == 2){
pin = Wire.read(); //Leemos primer byte que sera pin
Serial.print("LED: ");
Serial.println(pin);
estado = Wire.read(); //Leemos segundo byte que sera estado
Serial.print("Estado: ");
Serial.println(estado);
}
digitalWrite(pin, estado); //Prende o apagar LED
}
</syntaxhighlight>
== Ejemplo 3 ==
En este ejemplo ilustramos como un maestro puede solicitar datos de un esclavo.
Código maestro:
<syntaxhighlight lang="c++">
#include <Wire.h>
const byte esclavo = 42;
enum {
CMD_ID = 1,
CMD_READ_A0 = 2,
CMD_READ_D13 = 3
};
void setup (){
Serial.begin(9600);
Wire.begin();
sendCommand(CMD_ID, 1);
if (Wire.available()) {
Serial.print("Id del esclavo: ");
Serial.println(Wire.read(), DEC);
}else{
Serial.println ("No responde el esclavo");
}
}
void loop(){
int val;
sendCommand(CMD_READ_A0, 2);
val = Wire.read(); //Recuperamos MSB
val <<= 8; //Desplazamos 8 bits a la izquierda
val |= Wire.read(); //Recuperamos LSB
Serial.print("Valor sensor en A0 del esclavo: ");
Serial.println(val);
sendCommand(CMD_READ_D13, 1);
val = Wire.read();
Serial.print("Estado del pin D13 del esclavo: ");
Serial.println(val);
delay(500);
}
void sendCommand (const byte cmd, const byte largo){
Wire.beginTransmission(esclavo);
Wire.write(cmd);
Wire.endTransmission();
Wire.requestFrom(esclavo, largo); //No continua hasta que tenga datos en el buffer
}
</syntaxhighlight>
Código esclavo:
<syntaxhighlight lang="c++">
#include <Wire.h>
const byte esclavo = 42;
char comando = 0;
enum {
CMD_ID = 1,
CMD_READ_A0 = 2,
CMD_READ_D13 = 3
};
void setup(){
pinMode(13, INPUT_PULLUP); //Pulsador
pinMode(A0, INPUT); //Sensor analogico
Wire.begin(esclavo); //Numero del esclavo
Wire.onReceive(leer); //Cuando llega mensaje
Wire.onRequest(pedir); //Cuando maestro solicita mensaje
}
void loop(){
//Nada
}
void sensor(const byte pin){
int val = analogRead(pin);
byte buf[2];
buf[0] = highByte(val); //Capturamos MSB byte
buf[1] = lowByte(val); //Capturamos LSB byte
Wire.write(buf, 2); //Envia los 2 byte del sensor en A0
}
void leer(){
comando = Wire.read();
}
void pedir(){
switch (comando){
case CMD_ID:
Wire.write(42); //Envia numero del esclavo
break;
case CMD_READ_A0:
sensor(A0); //Envia dato sensor en A0
break;
case CMD_READ_D13:
Wire.write(digitalRead(13)); //Envia estado de pin 13
break;
}
}
</syntaxhighlight>
== Ejemplo 4 ==
En este ejemplo queremos saber que esclavos estan activos.
Código maestro:
<syntaxhighlight lang="c++">
#include <Wire.h>
void setup(){
Serial.begin(115200);
Serial.println("Escaneando bus I2C...");
byte n = 0;
Wire.begin();
for (byte i=8; i<120; i++){
Wire.beginTransmission(i);
if (Wire.endTransmission() == 0){
Serial.print("Encontre esclavo: ");
Serial.println(i);
n++;
delay(1);
}
}
Serial.println("Fin de busqueda.");
Serial.print("Encontre ");
Serial.print(n);
Serial.println(" esclavo(s).");
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 5 ==
Como ya habras sospechado cada dispositivo en el bus I2C debe tener su propia direccion y esta no puede repetirse. Para ello los dispositivos I2C duelen tener un par de pones rotulados C1 y C2, de forma que podemos cambiar la direccion soldando o cortando las pistas, los que permite 4 direcciones distintas.
<syntaxhighlight lang="c++">
#include <Wire.h>
void setup(){
Wire.begin();
Serial.begin(9600);
Serial.println("\nI2C Scanner");
}
void loop(){
Serial.println("Escaneando...");
byte error, address, num = 0;
for (dir=1; dir<127; dir++ ){
Wire.beginTransmission(dir);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("Encontré modulo I2C en la dirección 0x");
if (dir < 16){
Serial.print("0");
}
Serial.println(dir, HEX);
num++;
}else if (error == 4){
Serial.print("Error desconocido en dirección 0x");
if (dir < 16){
Serial.print("0");
}
Serial.println(dir, HEX);
}
}
if (num == 0){
Serial.println("Ningún modulo I2C se encontró\n");
}else{
Serial.print(num);
Serial.println(" módulos encontrados.\n");
}
delay(5000);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Librerias</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/en/Reference/Wire Wire]
* [https://github.com/PaulStoffregen/OneWire OneWire] de Paul Stoffregen
* [http://www.gammon.com.au/i2c I2C] - Nick Gammon
* [https://aprendiendoarduino.wordpress.com/category/i2c/ Bus I2C] - Enrique Crespo
* [https://www.luisllamas.es/arduino-i2c/ El bus I2C en Arduino] - Luis Llamas
* [https://github.com/felias-fogg/SoftI2CMaster Soft I2C Master] - otra libreria I2C
* [https://programarfacil.com/blog/arduino-blog/conectar-dos-arduinos-i2c/ Conectar 2 Arduino con I2C] - Luis Del Valle
* [https://naylampmechatronics.com/blog/35_tutorial-lcd-con-i2c-controla-un-lcd-con-so.html LCD con I2C] - Naylamp
* [https://www.prometec.net/combinar-dispositivos-i2c/ Combinar dispositivos I2C] - Prometec
[[Category:Librerias]]
siae63fc6r2pd0xjgeebrcouibzdo8u
abs()
0
28
4284
4202
2019-06-11T23:33:03Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Calcula el valor absoluto de una variable.
== Sintaxis ==
<pre>
abs(variable);
</pre>
== Parámetros ==
;variable: variable a avaluar. Tipo numerica: [[char]], [[int]], [[long]] o [[float]].
== Retorno ==
Retorna el valor absoluto.
== Advertencias ==
Nada.
== Ejemplos ==
<syntaxhighlight lang="c++">
char n = -32;
abs(n); //32
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones matematicas</categorytree>
== Referencias externas ==
[[Category:Funciones matematicas]]
nytn1lb9twv64gzc1y2tgwb64v7lhl4
acos()
0
188
4478
4241
2019-06-24T22:46:37Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Calcula el arco cuyo coseno es el arco indicado. El arco dado debe estar entre -1 y 1. El resultado sera el angulo en radianes.
== Sintaxis ==
<pre>
acos(arco);
</pre>
== Parámetros ==
;arco: numero entre -1 y 1. Numero tipo [[float]].
== Retornos ==
Angulo en radianes [[float]].
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
for (float n=-1; n<1; n += 0.01){
Serial.print(acos(n));
Serial.print(" radianes, es sexagesimal = ");
float x = 360*acos(n)/TWO_PI;
Serial.println(x);
}
}
</syntaxhighlight>
== Vea también ==
* [[sin()]]
* [[cos()]]
* [[tan()]]
* [[asin()]]
* [[atan()]]
* [[PI]]
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones trigonometricas]]
pctdt2dokalbht26xi9nw8wf7hnv2i4
ampersan
0
377
2355
2298
2018-08-09T02:03:22Z
Lucario448
3
/* Descripción */
wikitext
text/x-wiki
== Descripción ==
El operador de '''ampersand''' <nowiki>(&)</nowiki> se usa para obtener la dirección de memoria (puntero) de una variable individual.
El tipo de puntero obtenido es igual al tipo de dato del operando; en caso de que el valor apuntado requiera "reinterpretación" (que no es lo mismo que la conversión explícita o casting), el tipo de puntero debe ser convertido explícitamente. Este truco es útil para directamente leer o modificar cualquier variable como una simple matriz de [[byte|bytes]].
{{Nota|Es incluso válido obtener el puntero de otro puntero, y el de un elemento de una matriz.}}
== Sintexis ==
<pre>
variable1 = &variable2;
</pre>
== Parámetros ==
;variable1:
;variable2:
== Advertencias ==
Los punteros son uno de los temas más complicados para los principiantes en el aprendizaje de C, y es posible escribir la gran mayoría de los bocetos de Arduino sin encontrar punteros. Sin embargo, para manipular ciertas estructuras de datos, el uso de punteros puede simplificar el código, y el conocimiento de la manipulación de punteros es útil para tener en el kit de herramientas.
== Ejemplo ==
<pre>
byte *p, i=5, resultado;
p=&i; //5
resultado = *p; //resultado toma el valor de la posicion de memoria p
</pre>
== Vea también ==
* [[asterisco]] - <nowiki>(*)</nowiki>
== Referencia ==
* [https://www.arduino.cc/reference/en/language/structure/pointer-access-operators/reference/ Guia de referencia]
[[Category:Estructura]]
fyv4fo1f5cqkg30ygjcve9exdk66109
analogRead()
0
31
4866
4765
2019-09-11T22:40:02Z
Kike GL
2
/* Advertencias */
wikitext
text/x-wiki
== Descripción ==
Lee el valor de pines analógicos marcados en Arduino como A0~A5, con una resolución de 10 bits. Esta instrucción sólo funciona en los pines (A0~A5).
{{Tip|Los pines tanto analógicos como digitales de '''entrada''' no necesitan ser definidos con [[pinMode()]].}}
== Sintaxis ==
<pre>
analogRead(pin);
</pre>
== Parámetros ==
;pin: un pin analogico. A0~A5 en Arduino [[UNO]] y [[NANO]], A0~A15 en Arduino [[MEGA]].
== Retorno ==
El rango de valores devuelto puede estar entre 0~1023. Numero tipo [[int]].
== Comentarios ==
* Si el pin de entrada analógica no está conectado (al aire o flotante), el valor devuelto por '''analogRead()''' fluctuará en base a una serie de factores (por ejemplo, los valores de las otras entradas analógicas, lo cerca que tu mano este a la placa, poner un multimetro en paralelo, etc.). Este fenómeno suele ser aprovechado para el valor de inicialización del generador pseudo-aleatorio de números [[randomSeed()]].
* El rango de entrada y la resolución se pueden cambiar con [[analogReference()]].
* Se tarda unos 100 microsegundos para leer y codificar una entrada analógica, por lo que la velocidad de lectura máxima es de alrededor de 10,000 veces por segundo.
* La frecuencia máxima de lectura de un puerto análogo es de 1,5 Mhz (una cada 660 nano segundos). En comparación las entradas digitales pueden llegar a 15 Mhz (una cada 66 nano segundos), leyendo todas las entradas de forma simultánea.
{{Tip|Este comando tarda 1775 ciclos de CPU.}}
== Advertencias ==
* No debes dejar al aire estos pines porque generan ruido eléctrico.
* La hoja de datos de ATmega también advierte contra el cambio de pines analógicos en proximidad a la realización de lecturas en otros pines analógicos ya que esto puede causar ruido eléctrico e introducir inestabilidad en el sistema analógico.
* Puede ser deseable, después de manipular los pines analógicos (en modo digital), agregar un breve retraso antes de usar '''analogRead()''' para leer otros pines analógicos.
* La placa Arduino [[UNO]] contiene 6 canales (8 canales para [[MINI]] y [[NANO]], 16 para [[MEGA]]), analógicos con convertidor analógico a digital (ADC) de 10 bit. Esto significa que mapeará tensiones de entrada entre 0~5V en valores enteros entre 0~1023. Esto produce una resolución entre las lecturas de 4.9 mV por unidad.
* El comando '''analogRead()''' no funcionará correctamente si un pin analogico se ha configurado previamente como salida con [[pinMode()|pinMode(14, OUTPUT)]], por lo que si este es el caso, configúrelo nuevamente como [[pinMode()|pinMode(14, INPUT)]] antes de usar '''analogRead()'''. De forma similar, si estando como salida se puso [[digitalWrite()|digitalWrite(14, HIGH)]], la resistencia pull-up se establecerá, cuando se vuelva a configurar como entrada con [[pinMode()|pinMode(14, INPUT)]].
* Tenga en cuanta que activar la resistencia pull-up afecta las lecturas de '''analogRead()'''.
<pre>
pinMode(A0, INPUT_PULLUP);
</pre>
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
analogRead(A0);
analogRead(5);
const byte pin = 3;
int valor = analogRead(pin);
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.println(analogRead(A2));
}
</syntaxhighlight>
== Ejemplo 3 ==
En este ejemplo medimos el valor de un sensor cada 15 segundos y promediamos las ultimas 5 lecturas.
<syntaxhighlight lang="c++">
const byte ventana = 5;
int circularBuffer[ventana];
int* indice = circularBuffer;
long suma;
byte elementos;
float meter(int dato){
suma -= *indice;
suma += dato;
*indice = dato;
indice++;
if (indice >= circularBuffer + ventana){
indice = circularBuffer;
}
if (elementos < ventana){
elementos++;
}
return (float) suma / elementos;
}
void setup(){
Serial.begin(115200);
}
void loop(){
int x = analogRead(A0);
Serial.print(x);
float media = meter(x);
Serial.print(" promedio\t");
Serial.println(media);
delay(15000);
}
</syntaxhighlight>
{{Tip|Si prefieres hay una librería llamada [https://github.com/luisllamasbinaburo/Arduino-Meanfilter Arduino Meanfilter] de Luis Llamas que puedes usar.}}
== Vea también ==
<categorytree mode=all>Funciones pines</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/en/Tutorial/AnalogInputPins Guia de referencia Arduino]
* [http://manueldelgadocrespo.blogspot.com/p/description-reads-value-from-specified.html Reads value from specified] - Manuel Delgado Crespo
* [https://aprendiendoarduino.wordpress.com/tag/analogread/ analogRead()] - Aprendiendo Arduino
* [https://www.luisllamas.es/entradas-analogicas-en-arduino/ Entradas analogicas en Arduino] - Luis Llamas
* [https://www.luisllamas.es/arduino-filtro-media-movil/ Arduino media movil] - Luis Llamas
* [https://www.luisllamas.es/libreria-arduino-mean-filter/ Libreria mean filter] - Luis Llamas
* [http://diymakers.es/sensores-en-entradas-analogicas-de-arduino/ Sensores en entradas analogicas de Arduino] - Diy Makers
[[Category:Funciones pines]]
dllkqlrnor7v6sxaszg7ajwlm4dm42v
analogReadResolution()
0
34
4645
4352
2019-07-04T16:47:50Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
Configura el tamaño (en bits) del valor devuelto por [[analogRead()]]. Su valor predeterminado de ADC es 10 bits (devuelve valores entre 0~1023) para la compatibilidad con placas basadas AVR.
{{Nota|Extensión de la Analog API para los Arduino [[DUE]] y [[ZERO]].}}
El [[DUE]] y el [[ZERO]] tienen capacidades ADC de 12 bits (devuelve valores entre 0~4095) a las que se puede acceder cambiando la resolución a 12.
== Sintaxis ==
<pre>
analogReadResolution(bits)
</pre>
== Parámetros ==
;bits: determina la resolución (en bits) del valor devuelto por la función [[analogRead()]]. Puede establecer este entre 1 y 32. Se pueden ajustar resoluciones superiores a 12 pero los valores devueltos por [[analogRead()]] sufrirán una aproximación.
== Retornos ==
Nada.
== Advertencias ==
* Si se establece el valor de analogReadResolution() a un valor más alto que las capacidades de la placa, el Arduino sólo informará en su mayor resolución rellenando los bits extra con ceros.
* Por ejemplo: el uso de la Due o la Zero con analogReadResolution(16) le dará un número aproximado de 16 bits con los primeros 12 bits que contienen la lectura ADC real y los últimos 4 bits rellenados con ceros.
* Si se establece el valor analogReadResolution() a un valor inferior a las capacidades de la placa, se descartarán los bits menos significativos adicionales leídos de la ADC.
* El uso de una resolución de 16 bits (o cualquier resolución mayor que las capacidades reales del hardware) le permite escribir sketchs que manejan automáticamente los dispositivos con una resolución ADC mayor cuando éstos estén disponibles en las placas futuras sin cambiar una sola línea de código.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(9600);
}
void loop() {
//Lee la entrada A0 con resolución por defecto (10 bits)
analogReadResolution(10);
Serial.print("ADC 10 bit (default) : ");
Serial.print(analogRead(A0));
//Cambia la resolución a 12 bits y lee A0
analogReadResolution(12);
Serial.print(", 12 bit : ");
Serial.print(analogRead(A0));
//Cambia la resolución a 16 bits y lee A0
analogReadResolution(16);
Serial.print(", 16 bit : ");
Serial.print(analogRead(A0));
//Cambia la resolución a 8 bits y lee A0
analogReadResolution(8);
Serial.print(", 8 bit : ");
Serial.println(analogRead(A0));
delay(100);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones pines</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [http://manueldelgadocrespo.blogspot.com/p/analogreadresolution.html analogReadResolution()] - Manuel Delgado
[[Category:Funciones pines]]
hpz7l4xnzv5ornj39622l5l98odak2o
analogReference()
0
36
4350
4349
2019-06-12T22:38:09Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
Configura la tensión de referencia usada para las entradas analógicas (por ejemplo, el valor usado como la parte superior del rango de entrada). Las opciones son:
;DEFAULT: la referencia analógica por defecto, 5V (en placas Arduino alimentadas a 5V) o 3V3 (en placas Arduino alimentadas a 3V3)
;INTERNAL: una referencia incorporada, igual a 1V1 en el ATmega168 o ATmega328 y 2V56 en el ATmega8 (no disponible en el Arduino [[MEGA]])
;INTERNAL1V1: una referencia incorporada de 1.1V (solo Arduino [[MEGA]])
;INTERNAL2V56: una referencia incorporada de 2.56V (solo Arduino [[MEGA]])
;EXTERNAL: la tensión aplicada al pin AREF (solo de 0~5V) se usa como referencia.
{{Nota|Después de cambiar la referencia analógica, las primeras lecturas de '''analogRead()''' puede que no sean exactas.}}
== Sintaxis ==
<pre>
analogReference(type);
</pre>
== Parámetros ==
;type: el tipo de referencia a usar (DEFAULT, INTERNAL, INTERNAL1V1, INTERNAL2V56 o EXTERNAL).
== Retornos ==
Nada.
== Comentarios ==
== Advertencias ==
* No use cualquier tensión menor de 0V o mayor de 5V como tensión de referencia externa en el pin AREF.
* Si está usando una referencia externa en el pin AREF, debe establecer la referencia analógica a EXTERNAL antes de llamar [[analogRead()]]. De lo contrario, se produce un cortocircuito entre la tensión de referencia interna (generada internamente) y la tensión aplicada al pin AREF, dañando posiblemente el uC de la placa Arduino.
* Como alternativa, puede conectar la tensión de referencia externa al pin AREF a través de una resistencia de 5K, que le permite cambiar entre las tensiones de referencia externa e internas. Tenga en cuenta que la resistencia va a alterar la tensión que se usa como referencia porque hay una resistencia interna de 32 K en el pin AREF. Las dos actúan como un divisor de tensión, por lo que, por ejemplo, 2V5 aplicados a través de la resistencia producirá 2.5 * 32 / (32 + 5) = ~ 2V2 en el pin AREF.
== Ejemplo ==
<pre>
</pre>
== Vea también ==
<categorytree mode=all>Funciones pines</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [https://www.insidegadgets.com/2011/11/05/modifying-the-standalone-temperature-logger-to-log-voltage/ Modifying the standalone temperature logger to log voltage]
* [http://manueldelgadocrespo.blogspot.com/p/description-configures-reference.html analogReference()] - Manuel Delgado
* [http://platea.pntic.mec.es/~lmarti2/arduino/pract3/analogreference.htm analogReference()] - Intef
* [https://aprendiendoarduino.wordpress.com/tag/aref/ AREF] - Enrique Crespo
* [https://www.prometec.net/aref/ AREF] - Prometec
* [http://panamahitek.com/pin-aref-en-arduino/ AREF] - Panama Hitek
[[Category:Funciones pines]]
7iz1l77mwax2v0hov3uk745u4tfsiju
analogWrite()
0
33
5114
5054
2019-12-17T00:29:31Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Escribe un valor en un pin analógico (genera onda PWM). Se puede usar para encender un LED con luminosidad variable o accionar un motor que soporte PWM a diferentes velocidades. Después de llamar a '''analogWrite()''', el pin va a generar una onda cuadrada constante del ciclo de trabajo especificado hasta la siguiente llamada a '''analogWrite()''' o una llamada a [[digitalRead()]] o [[digitalWrite()]] en el mismo pin.
{{Tip|No es necesario llamar a [[pinMode()]] para configurar el pin como salida antes de llamar analogWrite().}}
== Sintaxis ==
<pre>
analogWrite(pin, PWM);
</pre>
== Parámetros ==
;pin: pin a usar. En Arduino [[UNO]] son: 3, 5, 6, 9, 10 y 11.
;PWM: ciclo de trabajo: entre 0 (siempre apagado) y 255 (siempre encendido).
{{Tip|Te recomiendo usar [[map()]] para adecuar los valores desde un pin analogico.}}
== Retornos ==
Nada.
== Comentarios ==
* La frecuencia de la señal PWM en la mayoría de los pines es de aproximadamente 490 Hz.
* En Arduino [[UNO]] y similares, los pines 5 y 6 tienen una frecuencia de aproximadamente 980 Hz.
* En Arduino [[Leonardo]] los pines 3 y 11 también se ejecutan a 980 Hz.
{{Nota|La función analogWrite() no tiene nada que ver con los pines analógicos o la función [[analogRead()]].}}
{{Tip|Este comando tarda 129 ciclos de CPU.}}
== Advertencias ==
* En la mayoría de las placas Arduino (con uC ATmega168 o ATmega328), esta función se puede utilizar en los pines 3, 5, 6, 9, 10, y 11.
* En el Arduino [[MEGA]], funciona en los pines 2 a 13 y 44 a 46.
* Las placas Arduino más antiguas con uC ATmega8 sólo admiten analogWrite() en los pines 9, 10 y 11.
* En el Arduino [[DUO]] analogWrite() funciona en los pines 2 a 13, más en los pines DAC0 y DAC1. A diferencia de los pines PWM, DAC0 y DAC1 son convertidores Digitales a Analógicos, y actúan como verdaderas salidas analógicas.
* Las salidas PWM generadas en los pines 5 y 6 tendrán ciclos de trabajo más altos de lo esperado. Esto es debido a las interacciones con las funciones [[millis()]] y [[delay()]], que comparten el mismo temporizador interno usado para generar las salidas PWM. Esto se notará sobre todo en entornos de pequeño ciclo de trabajo (por ejemplo 0 - 10) y puede dar lugar a que un valor de 0 apague completamente la salida en los pines 5 y 6.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
byte n;
void setup(){
pinMode(10, OUTPUT);
}
void loop(){
analogWrite(10, n);
n++;
delay(10);
}
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
const byte led = 9; //LED PWM
const byte pot = A3; //potenciómetro
void setup() {
pinMode(led, OUTPUT);
pinMode(pot, INPUT); //En realidad no es necesario
}
void loop() {
int val = analogRead(pot); //lee el pin de entrada (genera valores enteros entre 0~1023)
analogWrite(led, val/4); //PWM, soporta valores enteros entre 0~255
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones pines</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/analog-io/analogread/ Guia de referencia de Arduino]
* [https://www.luisllamas.es/tag/pwm/ PWM] - Luis Llamas
* [https://www.youtube.com/watch?v=RdfVdgkv51E Manejo de Servomotores con Arduino] - Humberto Higinio
* [https://www.youtube.com/watch?v=GnlmVMHA_wQ Que es PWM y para que sirve] - Rincon Ingenieril
* [https://programarfacil.com/podcast/26-arduino-entradas-y-salidas/ Entradas y salidas] - Luis del Valle
* [https://www.luisllamas.es/salidas-analogicas-pwm-en-arduino/ Salidas analogicas en Arduino] - Luis Llamas
* [http://manueldelgadocrespo.blogspot.com/p/analogwrite.html analogWrite()] - Manuel Delgado
* [http://diymakers.es/pwm/ PWM] - Diy Makers
* [http://diymakers.es/mover-motores-paso-paso-con-arduino/ Motor paso a paso con arduino] - Diy Makers
* [http://diymakers.es/control-velocidad-y-sentido-de-motor-dc/ Control de velocidad y sentido de motor DC] - Diy Makers
[[Category:Funciones pines]]
hn9p0q0i99gzs8jyieux5agqvjmn0jt
analogWriteResolution()
0
35
4646
4353
2019-07-04T16:48:54Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
Configura la resolución de la función [[analogWrite()]]. Esta resolución es, por defecto, de 8 bits (valores entre 0~255) para compatibilidad con las placas basadas en AVR.
{{Nota|analogWriteResolution() es una extensión de Analog API para los Arduino Due y Zero.}}
== Sintaxis ==
<pre>
analogWriteResolution(bits);
</pre>
== Parámetros ==
;bits: determina la resolución (en bits) de los valores utilizados en la función [[analogWrite()]]. El valor puede oscilar entre 1~32. Si se selecciona una resolución más alta o más baja que las capacidades del hardware de la placa, el valor utilizado en [[analogWrite()]] será truncado si es demasiado alto o rellenado con ceros si es demasiado bajo. Véase la nota a continuación para más detalles.
== Retornos ==
Nada.
== Advertencias ==
* El Due tiene las siguientes capacidades de hardware:
** 12 pines que, por defecto, son PWM de 8-bit, al igual que las placas basadas en AVR. Esta resolución se puede cambia a 12-bit .
** 2 pins con DAC (Conversor Digital a Analógico) de 12 bit.
Cambiando la resolución de escritura a 12, se puede utilizar [[analogWrite()]] con valores entre 0 y 4095 para explotar la resolución completa del DAC o para ajustar la señal de PWM sin darse la vuelta (rolling over).
* El Zero tiene las siguientes capacidades hardware:
** 10 pines que, por defecto, son PWM de 8-bit, igual que las placas basadas en AVR. Esta resolución se puede cambiar a 12-bit.
** 1 pin conDAC (Convertidor Digital a Analógico) de 10-bit .
Cambiando la resolución de escritura a 10, se puede utilizar [[analogWrite()]] con valores entre 0 y 1023 para explotar la resolución completa del DAC.
== Ejemplo ==
<pre>
void setup(){
// abre la conexión serie
Serial.begin(9600);
// configura los pines digitales como salidas
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop(){
//lee la entrada A0 y la mapea al pin PWM
int sensorVal = analogRead(A0);
Serial.print("Analog Read : ");
Serial.print(sensorVal);
//Resolución PWM por defecto
analogWriteResolution(8);
analogWrite(11, map(sensorVal, 0, 1023, 0 ,255));
Serial.print(" , valor PWM de 8 bit: ");
Serial.print(map(sensorVal, 0, 1023, 0 ,255));
//Cambia la resolución PWM a 12 bits (solo DUE)
analogWriteResolution(12);
analogWrite(12, map(sensorVal, 0, 1023, 0, 4095));
Serial.print(" , 12-bit PWM value : ");
Serial.print(map(sensorVal, 0, 1023, 0, 4095));
//Cambia la resolución PWM a 4 bits
analogWriteResolution(4);
analogWrite(13, map(sensorVal, 0, 1023, 0, 127));
Serial.print(", 4-bit PWM value : ");
Serial.println(map(sensorVal, 0, 1023, 0, 127));
delay(5);
}
</pre>
== Vea también ==
<categorytree mode=all>Funciones pines</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/analogwriteresolaution/ Guia de referencia de Arduino]
* [http://manueldelgadocrespo.blogspot.com/p/analogwriteresolaution.html analogWriteResolution()] - Manuel Delgado
[[Category:Funciones pines]]
qkx389f84q4bzyrtjmn52rhxfeqtj0p
and
0
97
5296
5292
2020-06-06T21:40:03Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
Operador lógico que hace las veces de conectiva conjuntiva ("y"), cuyo resultado es dado por la siguiente tabla de verdad:
{| class="wikitable col3cen"
!a!!b!!a <nowiki>&&</nowiki> b
|-
|0||0||0
|-
|1||0||0
|-
|0||1||0
|-
|1||1||1
|}
== Sintaxis ==
<pre>
expresion 1 && expresion 2;
expresion 1 and expresion 2;
</pre>
== Retorna ==
Verdadero o falso.
== Advertencias ==
* No confundir el operador boleano '''and''' (<nowiki>&&</nowiki>), con el operador [[and bit a bit]] (<nowiki>&</nowiki>).
* Solo si todos los términos son verdaderos al expresión es verdadera.
== Ejemplo ==
<syntaxhighlight lang="c++">
if (x > 9 && x < 20){
//Esta entre 10 y 19
}else{
//Esta fuera del rango
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador logico</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [https://programarfacil.com/blog/programacion/la-logica-en-la-programacion/ La lógica en la programacion] - Luis Del Valle
* [https://aprendiendoarduino.wordpress.com/category/operadores/ Operadores] - Aprendiendo Arduino
[[Category:Operador logico]]
9ul4mensqd8damfixn3iwe8owdqav6g
and bit a bit
0
207
4987
4706
2019-09-26T23:27:35Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
El operador binario bit a bit AND es representado por el caracter et (ampersand) '''&'''. AND establece (pone en 1) un bit sí y solo si el bit de esa posición está establecido (en 1) en ambos operandos.
{| class="wikitable col1cen col2cen col3cen"
!a!!b!!a <nowiki>&</nowiki> b
|-
|0||0||0
|-
|1||0||0
|-
|0||1||0
|-
|1||1||1
|}
{{Nota|esta operación también es utilizada para borrar (poner en cero) uno o varios bits específicos en una variable. Todo bit en 1 en el segundo operando, se quedará como está; mientras que todo bit en cero se borrará}}
== Sintaxis ==
<pre>
op1 & op2
</pre>
;op1: primer operando, es la variable (de cualquier tipo) a modificar.
;op2: segundo operando, es quien va a relizar las modificaciones pertinentes.
== Retorno ==
El valor resultante, donde cada bit se establece sólo si lo está en ambos operandos.
== Advertencias ==
* No confundir el '''operador bit a bit and''' (&) con el boleano [[and]] ('''<nowiki>&&</nowiki>''').
* Idealmente ambos operandos deberían ser del mismo tipo (tamaño); en caso de no ser así, solo se operará con los bytes menos significativos del segundo, o se podrían borrar bits si este es el más pequeño.
== Ejemplo ==
<syntaxhighlight lang="c++">
char n = -64;
n &= B01111111; //Con esto lo acabo de convertir en positivo; mientras que los demás bits no me interesan, por eso no los toco.
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador bit a bit</categorytree>
<categorytree mode=all>Operador logico</categorytree>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [https://playground.arduino.cc/Code/BitMath/#bitwise_and Bitwise AND] - Playground
[[Category:Operador bit a bit]]
n3garx4txy4p3edylnj4m18mpmsp528
and bit a bit compuesto
0
375
5023
5022
2019-09-27T00:09:27Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
El operador '''and bit a bit compuesto''' <nowiki>(&=)</nowiki> se usa a menudo para forzar determinados bits en una variable a 0 (LOW).
{| class="wikitable col3cen"
!a!!b!!a <nowiki>&=</nowiki> b
|-
|0||0||0
|-
|1||0||0
|-
|0||1||0
|-
|1||1||1
|}
{{Nota|A menudo se hace referencia en las guías de programación como "borrado" o "reseteado" (RESET) de bits.}}
== Sintaxis ==
<pre>
variable &= mascara;
variable = variable & mascara;
</pre>
== Parámetros ==
;variable: Nombre de ala variable sobre la cual operar.
;mascara: Constante entera puede ser [[char]], [[byte]], [[int]], [[long]].
== Retorno ==
* Los bits tratados con 0 se fuerzan a 0, sin importar su estado.
* Los bits tratados con 1 mantienen su estado.
== Comentarios ==
debido a que se trata de bits de un operador de bits - es conveniente usar el formateador binario con constantes. Las cifras siguen siendo el mismo valor en otras representaciones, que simplemente no son tan fáciles de entender. Además, B00000000 se muestra por claridad, pero cero en cualquier formato de número es cero.
== Advertencias ==
Nada.
== Ejemplo ==
Para configurar los bits 0 (menos significativo) y 0 de una variable, dejando el resto de la variable sin cambios, se use el operador '''and bit a bit compuesto''' (&=) con la constante B11111100.
<syntaxhighlight lang="c++">
byte a = B10101010;
a |= B11111100; //B10101000
</syntaxhighlight>
{|class="wikitable"
|Variable||Bxxxxxxxx
|-
|Mascara||B11111100
|-
|Resultado||Bxxxxxx00
|}
== Vea también ==
<categorytree mode=all>Operador bit a bit</categorytree>
<categorytree mode=all>Operador bit a bit compuesto</categorytree>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias externas ==
* [https://manueldelgadocrespo.blogspot.com/p/blog-page_14.html Manuel Delgado crespo]
[[Category:Operador bit a bit compuesto]]
h8tgwo4ey0hzkwj4n2zsbaq3c403cly
asignacion
0
90
5026
5025
2019-09-27T00:14:01Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Almacena el valor de la derecha del signo igual en la variable de la izquierda del signo igual.
Un solo signo de igualdad, en el programación Arduino, se llama '''operador de asignación'''. Tiene un significado diferente del que tiene en álgebra, donde indica una ecuación o igualdad. El operador de asignación indica al uC que avalúe cualquier valor o expresión que esté a la derecha del signo igual y que lo almacene en la variable.
== Sintaxis ==
<pre>
tipo variable = valor;
tipo variable = expresion;
</pre>
== Parámetros ==
;tipo: determina el tipo de variable: [[bool]], [[char]], [[byte]], [[int]], [[long]], [[float]], etc
;variable: nombre de variable a definir.
;valor: un valor a asignar a la variable,
;expresion: expresión o formula que determinara el valor de la variable.
== Advertencias ==
* La variable del lado izquierdo del operador de asignación (signo =) tiene que tener capacidad para almacenar el valor. Si no es lo suficientemente grande para contener el valor, el valor almacenado en la variable será incorrecto.
* No se debe confundir el operador de asignación '''=''' (un solo signo igual) con el operador de comparación '''==''' (dos signos igual), que avalúa si dos expresiones son iguales.
== Ejemplos ==
<syntaxhighlight lang="c++">
bool a = false;
byte n = 122;
int x = 1024;
char c = 'a';
int z = analogRead(A0);
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador aritmetico</categorytree>
<categorytree mode=all>Operador aritmetico compuesto</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Operador aritmetico]]
4ytnp4z3ecv225z3ron712e4sipwean
asin()
0
187
4479
4477
2019-06-24T22:47:33Z
Kike GL
2
/* Advertencias */
wikitext
text/x-wiki
== Descripción ==
Calcula el arco cuyo seno es el arco indicado. El arco dado debe estar entre -1 y 1. El resultado sera el angulo en radianes.
== Sintaxis ==
<pre>
asin(arco);
</pre>
== Parámetros ==
;arco: numero entre -1 y 1. Numero tipo [[float]].
== Retornos ==
Angulo en radianes [[float]].
== Advertencias ==
El arco debe ser entre -1 y +1.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
for (float n=-1; n<1; n += 0.01){
Serial.print(asin(n));
Serial.print(" radianes, es sexagesimal = ");
float x = 360*asin(n)/TWO_PI;
Serial.println(x);
}
}
</syntaxhighlight>
== Vea también ==
* [[sin()]]
* [[cos()]]
* [[tan()]]
* [[acos()]]
* [[atan()]]
* [[PI]]
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones trigonometricas]]
4ejduf65rhzddcysuo8ong2mwa1xewc
asterisco
0
378
5236
5040
2020-02-02T18:54:04Z
Kike GL
2
/* Ejemplo 2 */
wikitext
text/x-wiki
== Descripción ==
El operador de '''asterisco''' <nowiki>(*)</nowiki> tiene dos funciones:
# Declarar variables como punteros de cierto tipo de dato.
# Desreferenciar; dicho en otras palabras, trabajar con el valor apuntado en vez del puntero en sí. Dicho valor dependerá del tipo de dato del puntero (es "interpretado" segun la posición de memoria dada).
{{Nota|A menos que el microcontrolador tenga más de 32 KB de [[SRAM]], los punteros siempre serán variables enteras de 16 bits (el equivalente a [[word]]) independientemente del tipo que interpreten. De hecho también se pueden realizar las típicas operaciones matemáticas en punteros como cualquier otro tipo número-entero de variable conocido.}}
== Sintaxis ==
Declara un puntero. La diferencia con la declaracion de una variable normal radica en el * después del tipo de dato y antes del nombre.
<pre>
tipo* puntero;
</pre>
Asigne el valor apuntado por variable2. Cuando no es en una declaración, se usa para desreferenciar. El * va antes del nombre del puntero.
<pre>
variable1 = *variable2;
</pre>
== Parámetros ==
;puntero: Una variable que se utiliza como puntero, y que la posición apuntada será interpretada como si fuera un dato de tipo '''tipo'''.
;variable1: Una variable normal (que solamente almacena un dato del tipo declarado).
;<nowiki>*</nowiki>variable2: Puntero del cuál se quiere obtener el valor de la posición a la que apunta.
== Comentarios ==
Los punteros son uno de los temas más complicados para los principiantes de Arduino y es posible escribir la gran mayoría de [[boceto]]s sin tener que encontrarse con los punteros. Sin embargo, para la manipulación de ciertas estructuras de datos, el uso de punteros puede simplificar el código, y el conocimiento de la manipulación de punteros es útil para tener en la propia caja de herramientas.
Bien usados, los punteros son excepcionalmente útiles para resolver cierto tipo de problemas, pero aprender a manejarlos puede provocar serios dolores de cabeza, especialmente cuando tratas de depurar un programa que se niega a funcionar como debe.
En primer lugar debemos entender que la memoria del Arduino está numerada en posiciones. Cada posición de memoria tiene una dirección única, que debe ser especificada cuando queremos leer o escribir su valor. Si miramos el tipo de memoria de los distintos Arduinos, vemos que, por ejemplo, el [[UNO]] dispone de 32 K de memoria [[flash]] para almacenamiento de programas y de 2 K de [[SRAM]] para almacenar de variables.
Cuando definimos una variable en el [[boceto]], el compilador le asigna una posición en la memoria [[SRAM]]. Si la variables es del tipo [[char]] o [[byte]] asigna un byte de memoria, si es del tipo [[int]] o [[unsigned int]] le asigna dos posiciones de memoria y si es un tipo [[long]] o [[unsigned long]] le asigna 4 posiciones de memoria.
<pre>
int numero; //Declaramos variable
numero = 123; //Definimos variable
</pre>
{|class="wikitable"
!Nombre!!Dirección de memoria!!Contenido
|-
|numero||2050||123
|}
Esto nos da una idea de lo que puede suceder si escribimos un valor long en una dirección de memoria que corresponde a un int. Como el tipo long ocupa 4 bytes, cuando intentemos meterlos en una dirección a la que se ha asignado 2 bytes, va a ocupar el contenido de las siguientes posiciones de memoria, que pueden estar usadas por otros satos. Prueba esto:
<pre>
void setup(){
Serial.begin(115200);
int numero;
long n = 100000;
numero = n; //Estas intentando guardar 4 byte donde solo reservaste 2 bytes
Serial.println(numero); //-31072
}
void loop(){
//Nada
}
</pre>
Cuando declaras una matriz, en realidad estás declarando un puntero. De hecho es posible utilizar '''[]''' en cualquier puntero, aunque este no se haya declarado explícitamente como una matriz.<br>
La diferencia entre declarar un puntero y una matriz, está en lo que ocurre implícitamente: declarar un puntero es igual que declarar cualquier otra variable simple; mientras que declarar una matriz es más que asignar 2 bytes, es asignar otro espacio según el tipo de dato y el número ingresado entre los '''[]''' (o en su defecto, la cantidad de elementos que aparece entre los '''{}'''), inicializarlo con ceros o con los valores preestablecidos, y finalmente asignarle al respectivo puntero la posición del primer byte de ese espacio que tuvo que asignar.
El acceso a un elemento es más amigable hacerlo con los '''[]''', sin embargo existen dos formas de realizar la misma acción:
<pre>
matriz[i] = 4;
*(matriz + i) = 4;
// Ambos hacen exactamente lo mismo
</pre>
De las dos formas es válido ya que una matriz es un puntero, y en cierto modo también se puede decir que al revés.
== Advertencias ==
* Errores de '''overflow''' de registro no son advertidos por el compilador, ya que el puntero puede apuntar en cualquier posición arbitraria de la memoria. Tanto así que puede apuntarse a sí mismo, a otro puntero, e incluso a cualquier variable, matriz u objeto existente en el momento.
* '''Un gran poder conlleva una gran responsabilidad'''. Debido a que el puntero tiene el "superpoder" de meterse en cualquier parte de la memoria de ejecución ([[SRAM]]), existe el riesgo de corromperla sin previo aviso y colgar el programa en cuestión.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
byte *p; i=5, resultado;
p = &i; //5
resultado = *p; //resultado toma el valor de la posicion de memoria de p
</syntaxhighlight>
== Ejemplo 2 ==
Implementamos un '''buffer circular''' con puntero.
<syntaxhighlight lang="c++">
const int ventana = 5;
int circularBuffer[ventana];
int* indice = circularBuffer;
void meter(int valor){
*indice = valor;
indice++;
if (indice >= circularBuffer + ventana){
indice = circularBuffer;
}
}
void setup(){
Serial.begin(115200);
}
void loop(){
if (Serial.available()){
int x = Serial.parseInt();
meter(x);
for (byte n=0; n<ventana; n++){
Serial.print(circularBuffer[n]);
Serial.print(",");
}
Serial.println();
}
}
</syntaxhighlight>
== Ejemplo 3 ==
No se puede crear una [[matriz]] de matrices. Pero si se puede usar '''punteros''' a matrices, asi:
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
byte cero[] = { 0xA6, 0xD4, 0xAC, 0xF8 };
byte uno[] = { 0xE9, 0x48, 0xCC, 0xE3 };
byte dos[] = { 0x46, 0x6F, 0xA5, 0xF8 };
byte tres[] = { 0xC2, 0x9D, 0xFC, 0x33 };
byte* matriz[4] = {cero, uno, dos, tres}; //Usando puntero
for (byte i=0; i<4; i++){
for (byte j=0; j<4; j++){
Serial.print(matriz[i][j], HEX);
Serial.print(", ");
}
Serial.println();
}
}
void loop() {
//Nada
}
</syntaxhighlight>
== Vea también ==
* [[ampersan]] - <nowiki>(&)</nowiki>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/structure/pointer-access-operators/dereference/ Guia de referencia]
* [https://www.luisllamas.es/buffer-circular-arduino/ Buffer circular en Arduino] - Luis LLamas
* [https://www.prometec.net/punteros/ Punteros] - Prometec
* [http://diwo.bq.com/arduino-variables-punteros/ Punteros] - Diwo
* [http://panamahitek.com/punteros-serial-arduino-parte-iii/ Punteros Arduino] - Panama Hitek
[[Category:Estructura]]
odbvb7txjngg98kdf3ytdg1a5jm5jn4
atan()
0
189
4193
2728
2019-06-11T21:14:02Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Calcula el arco cuyo tangente es el arco indicado.
== Sintaxis ==
<pre>
atan(arco);
</pre>
== Parámetros ==
;arco: cualquier numero. Numero tipo [[float]].
== Retornos ==
Angulo en radianes [[float]].
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
for (float n=-100; n<100; n++){
Serial.print(atan(n));
Serial.print(" radianes, es sexagesimal = ");
float x = 360*atan(n)/TWO_PI;
Serial.println(x);
}
}
</syntaxhighlight>
== Vea también ==
* [[sin()]]
* [[cos()]]
* [[tan()]]
* [[asin()]]
* [[acos()]]
* [[PI]]
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones trigonometricas]]
2siniekwrdsf3plsfuewlee54pm0ykk
atof()
0
365
4504
4496
2019-06-24T23:05:42Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Convertir una matriz [[char]] o [[string]] a [[float]].
{{Tip|Ojo desde una matriz a [[float]].}}
== Sintaxis ==
<pre>
atof(matriz);
</pre>
== Parametros ==
;matriz: nombre de la matriz tipo [[char]]
== Retorno ==
Numero tipo [[float]].
== Advertencias ==
Nada.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
char texto[] = "-123.45";
float x = atof(texto);
Serial.println(x, 3); //-123.450
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones conversion</categorytree>
== Referencias ==
* [https://www.luisllamas.es/convertir-texto-a-numero-arduino/ Convertir texto a numero] - Luis Llamas
[[Category:Funciones conversion]]
2zr7elsfjjc1wo2ihz38n63e588ahj8
atoi()
0
402
4497
4494
2019-06-24T22:58:34Z
Kike GL
2
/* Descripción */
wikitext
text/x-wiki
== Descripción ==
Convertir una matriz [[char]] o [[string]] a [[int]].
{{Tip|Ojo desde una matriz a [[int]].}}
== Sintaxis ==
<pre>
atoi(matriz);
</pre>
== Parametros ==
;matriz: nombre de la matriz tipo [[char]]
== Retorno ==
Numero tipo [[int]].
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
char texto[] = "-12345";
int x = atoi(texto);
x += 12300;
Serial.println(x); //-45
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones conversion</categorytree>
== Referencias ==
* [https://www.luisllamas.es/convertir-texto-a-numero-arduino/ Luis LLamas]
[[Category:Funciones conversion]]
3jx8buk7kq9l3m64hxm97qbkq2c05ij
atol()
0
364
4505
4493
2019-06-24T23:06:01Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Converir una matriz [[char]] o [[string]] en [[long]].
{{Tip|Ojo desde una matriz a [[long]].}}
== Sintaxis ==
<pre>
atol(matriz);
</pre>
== Parametros ==
;matriz: nombre de la matriz tipo [[char]]
== Retorno ==
Numero tipo [[long]].
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
char texto[] = "-12345";
Serial.println(atol(texto)/5); //-2469
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
* [[string]]
* [[atoi()]]
* [[strtoul()]]
* [[atof()]]
* [[strlen()]]
== Referencias ==
* [https://www.luisllamas.es/convertir-texto-a-numero-arduino/ Convertir texto a numero] - Luis Llamas
[[Category:Funciones conversion]]
1qknrfziy0wxdbluar619xsucjh4ytu
attachInterrupt()
0
40
5047
5046
2019-10-07T21:56:32Z
Kike GL
2
/* Advertencias */
wikitext
text/x-wiki
== Descripción ==
Esta función no permite traducir el pin digital real al número de interrupción específico. Normalmente, debe usar digitalPinToInterrupt(pin), en lugar de colocar un número de interrupción directamente en su boceto. Los pines específicos con interrupciones, y su asignación para interrumpir el número varía en cada tipo de placa. El uso directo de números de interrupción puede parecer simple, pero puede causar problemas de compatibilidad cuando el boceto se ejecuta en una placa diferente. Sin embargo, los bocetos más antiguos a menudo tienen números de interrupción directa.
A menudo se usaron el número 0 (para el pin digital 2) o el número 1 (para el pin digital 3). La tabla a continuación muestra los pines de interrupción disponibles en varios tableros.
Tenga en cuenta que en la tabla a continuación, los números de interrupción se refieren al número que se pasará a attachInterrupt(). Por razones históricas, esta numeración no siempre se corresponde directamente con la numeración de interrupción en el chip ATmega (por ejemplo, int.0 corresponde a INT4 en el chip ATmega2560).
Pines digitales con Interrupción.
{| class="wikitable col2cen col3cen col4cen col5cen col6cen"
|+Pines de interrupcion en Arduino
!Arduino!!INT.0!!INT.1!!INT.2!!INT.3!!INT.4!!INT.5
|-
|[[UNO]]||2||3|| || || ||
|-
|[[MEGA]]||2||3||21||20||19||18
|-
|32u4||3||2||0||1||7||
|-
|[[DUO]]||colspan=6|Todos los pines
|}
{{Tip|Asi como hay las INT tambien hay las PCINT (Ping Change INT). No son tan versatiles, son mas lentas pero son muchas.}}
== Sintaxis ==
<pre>
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode); //recomendado
attachInterrupt(INT, ISR, modo); //no recomendado
attachInterrupt(pin, ISR, modo) ; //Solo DUE, Zero y MKR1000.
</pre>
== Parámetros ==
El primer parámetro para '''attachInterrupt()''' es el número de interrupción. Normalmente debería utilizar digitalPinToInterrupt(pin) para traducir el pin digital real al número de interrupción específica. Por ejemplo, si se conecta al pin3, utilice digitalPinToInterrupt(3) como el primer parámetro para '''attachInterrupt()'''.
;INT: Es el número de interrupción (int)
;pin: Es el número de pin (solo [[DUE]], [[Zero]], [[MKR1000]])
;ISR: Función de usuario que se invoca cuando sucede la interrupción; esta función no debe tener parámetros ni devolver nada. Esta función a veces se denomina Rutina del Servicio de Interrupciones.
;modo: define cuando debe ser disparada la interrupción. Existen cuatro constantes predefinidas como valores válidos
:LOW dispara la interruoción cuando el pin está a nivel bajo.
:CHANGE dispara la interrupción cuando el pin cambia su valor.
:RISING dispara la interrupción cuando el pin pasa de nivel bajo a nivel alto.
:FALLING dispara la interrupción cuando el pin pasa de nivel alto a nivel bajo.
== Retornos ==
Nada.
== Comentarios ==
* Haz lo que quieras pero no te demores. Acaba cuanto antes y lárgate. Debes entender que una interrupción es como un estado de excepción, que se puede usar sin reparos, pero entendiendo que hay que hacer el trabajo y salir cuanto antes.
* Hay cosas que no funcionan, como las funciones: [[delay()]], [[millis()]], Serial.xx y cualquier cosa que dependa de interrupciones o timers.
* De hecho, una ISR o función CallBack, no puede retornar parámetros ni tampoco recibirlos.
== Advertencias ==
* Dentro de la función de Interrupción, [[delay()]] no funcionará y el valor devuelto por [[millis()]] no aumentará. Los datos serie recibidos, mientras que la función está activa se pueden perder. Usted debe declarar como [[volatile]] cualquier variable que se modifique dentro de la función de Interrupción. Vea la sección de ISR a continuación para obtener más información.
== Ejemplo 1 ==
En este ejemplo hacemos que el LED a bordo conmute con un pulsador en el pin digital 2.
<syntaxhighlight lang="c++">
const byte pulsador = 2;
volatile bool estado = LOW; //Sinonimo de false o 0.
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(pulsador, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(pulsador), cambia, CHANGE);
}
void cambia(){
estado = !estado;
}
void loop(){
digitalWrite(LED_BUILTIN, estado);
}
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo hacemos que el LED a bordo conmute con un pulsador en el pin digital 2 considerando el [[Rebote]]
<syntaxhighlight lang="c++">
const byte pulsador = 2;
const byte retardo = 150;
volatile bool estado = LOW; //Sinonimo de false o 0.
volatile unsigned long tiempo = 0;
volatile byte n = 0;
volatile byte anterior = 0;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(pulsador, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(pulsador), cambia, FALLING);
}
void cambia(){
if (millis() > tiempo + retardo){
estado = !estado;
tiempo = millis();
n++;
}
}
void loop(){
if (n != anterior){
digitalWrite(LED_BUILTIN, estado);
anterior = n;
Serial.println(n);
}
}
</syntaxhighlight>
== Vea también ==
* [[detachInterrupt()]]
* [[interrupts()]]
* [[noInterrupts()]]
* [[digitalPinToInterrupt()]]
* [[PCINT]]
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [http://www.gammon.com.au/interrupts Interrupts] - Nick Gammon
* [https://www.luisllamas.es/tag/interrupciones/ Interrupciones (INT)] - Luis Llamas
* [https://www.luisllamas.es/interrupciones-en-todos-los-pines-de-arduino-con-pcint/ Arduino PCINT] - Luis Llamas
[[Category:Funciones interrupciones]]
hp28xtldh1xm1mbvsg1rwbaczmz3fmh
bit()
0
45
4780
4779
2019-07-17T22:29:22Z
Kike GL
2
/* Ejemplo 3 */
wikitext
text/x-wiki
== Descripción ==
Calcula el valor del bit especificado por el parámetro.
{| class="wikitable"
|-
| bit || 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7
|-
| valor || 1 || 2 || 4 || 8 || 16 || 32 || 64 || 128
|}
== Sintaxis ==
<pre>
bit(valor);
bit(variable);
</pre>
== Parámetros ==
;valor: valor a evaluar.
;variable: variable a evaluar.
== Retornos ==
Retorna el bit 2^valor o 2^variable.
== Advertencias ==
Nada.
== Ejemplos 1 ==
<syntaxhighlight lang="c++">
bit(2); //4
bit(5); //32
bit(8); //256
</syntaxhighlight>
== Ejemplos 2 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
for (byte i=0; i<10; i++){
Serial.println(bit(i));
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 3 ==
Parpadea el LED a bordo.
<syntaxhighlight lang="c++">
void setup() {
DDRB = DDRB | bit(5); //Configura el pin digital 13 (bit 5) como OUTPUT, no altera el resto.
}
void loop() {
PORTB = PORTB ^ bit(5); //Invertir estado del pin digital 13 (bit 5), no altera el resto.
delay(500);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones bit y byte</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones bit y byte]]
9rb7khkzrpil7db6zk7a1kc9r5vpdnv
bitClear()
0
191
4783
4782
2019-07-17T23:36:53Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Borra (pone a 0) un bit de una variable numérica.
== Sintaxis ==
<pre>
bitClear(variable, n)
</pre>
== Parámetros ==
;variable: variable a evaluar.
;n: bit a borrar. Desde 0 el bit menos significativo (mas a la derecha).
== Retornos ==
Nada.
== Advertencias ==
Ninguna.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
byte pinState = B00000000; //Inicializa todos los pines en LOW
bitClear(pinState, 2); //Poner el 3er bit LOW ose B0000100
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
byte pinState = B11111111; //Inicializa todos los pines en HIGH
bitClear(pinState, 2); //Poner el 3er bit LOW ose B11111011
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones bit y byte</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [http://manueldelgadocrespo.blogspot.com/p/bitclear.html bitClear()] de Manuel delgado
[[Category:Funciones bit y byte]]
ey5ku2d9s1zd461776pjp9v0ix5jgkm
bitRead()
0
192
4791
4790
2019-07-17T23:53:15Z
Kike GL
2
/* Ejemplo 4 */
wikitext
text/x-wiki
== Descripción ==
Lee un bit especifico de una variable.
== Sintaxis ==
<pre>
bitRead(variable, n);
</pre>
== Parámetros ==
;variable: variable a evaluar.
;n: bit a leer. Empezando en 0 el menos significativo (derecha).
== Retornos ==
1 o 0 dependiendo del valor de dicho bit
== Advertencias ==
Nada.
== Ejemplo 1 ==
Revisar el bit más significativo (izquierda) es una manera alternativa para detectar un valor entero negativo en un numero tipo [[char]].
<syntaxhighlight lang="c++">
char c = 200; // Al ser un tipo de dato con signo, 200 se traduce a -56
if (bitRead(c, 7)){
Serial.println("Es negativo");
}else{
Serial.println("Es positivo");
}
</syntaxhighlight>
== Ejemplo 2 ==
Leer un [[byte]] e imprimirlo al reves (izquierda a derecha).
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(9600);
byte pinState = B10101010;
for (byte i=0; i<8; i++) {
Serial.print(bitRead(pinState, i));
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 3 ==
En este ejemplo usamos un 74x595 para manejar 7 LED con 3 pines de Arduino. En los LEd se mostraran los numero de 0~255 en binario.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
pinMode(9, OUTPUT); //STC (12), Latch pin
pinMode(10, OUTPUT); //SHC (11), Shift register
pinMode(11, OUTPUT); //DS (14), Data in
}
void loop(){
for (byte n=0; n<256; n++){
Serial.println(n);
for (byte i=0; i<8; i++){
digitalWrite(11, bitRead(n,i)); //Ingresamos bit uno a uno
digitalWrite(10, HIGH); //Pulso de Shift
digitalWrite(10, LOW);
}
digitalWrite(9, HIGH); //Pulso de Latch
digitalWrite(9, LOW);
delay(500);
}
}
</syntaxhighlight>
== Ejemplo 4 ==
Tenemos 8 LEDs (2 al 9) y un pulsados (pin 10). Cada vez que pulsamos avanzamos '''n''' en una unidad y mostramos '''n''' en binario.
<syntaxhighlight lang="c++">
const byte LED[] = {2, 3, 4, 5, 6, 7, 8, 9};
const byte boton = 10;
bool actual,anterior;
byte n;
void setup() {
for (byte i=0; i<8; i++) {
pinMode(LED[i], OUTPUT);
}
pinMode(boton, INPUT);
}
void loop() {
actual = digitalRead(boton);
if (actual && !anterior){
n++;
for (byte i=0; i<8; i++) {
digitalWrite(LED[i], bitRead(n, i));
}
}
anterior = actual;
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones bit y byte</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones bit y byte]]
e6sq7q6qeaw3bp4vm2tdl8pomzp0ah9
bitSet()
0
193
4703
4379
2019-07-14T17:43:11Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Establece (pone a 1) un bit de una variable numérica.
== Sintaxis ==
<pre>
bitSet(variable, n);
</pre>
== Parámetros ==
;variable: variable a evaluar.
;n: bit a seleccionar.
== Retornos ==
Nada.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones bit y byte</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones bit y byte]]
mptebdpjdwap35u6ptg7j7ho3ybnvgq
bitWrite()
0
194
4784
4699
2019-07-17T23:39:22Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Sobrescribe un bit según el valor ingresado.
== Sintaxis ==
<pre>
bitWrite(variable, n, valor);
</pre>
== Parámetros ==
;variable: Variable numerica a evaluar.
;n: bit a escribir.
;valor: valor [[bool]] (o el resultado de "diferente de cero" cuando se ingresa un dato de otro tipo) a escribir en el bit.
== Retornos ==
Nada.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
byte pinState = 0; //Inicialisa todos los pines a LOW (B00000000)
bitWrite(pinState, 0, HIGH); //Pone el 1er pin en HIGH, pinState = B00000001
bitWrite(pinState, 3, HIGH); //Pone el 3er pin a HIGH, pinState = B00001001
bitWrite(pinState, 0, LOW); //Pone el 1er pin a LOW, pinState = B00001000
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones bit y byte</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
== Referencias externos ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones bit y byte]]
ac7xwy46ehrz63ajk61sdtd22q8xx94
bitshift left
0
106
4973
4418
2019-09-26T16:25:11Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Desplaza hacia la izquierda (hacia el bit más significativo) una cantidad determinada de bits de una variable o constante; rellenando con ceros.
== Sintaxis ==
<pre>
valor <nowiki><<</nowiki> posiciones;
variable = variable <nowiki><<</nowiki> posiciones;
variable <nowiki><<=</nowiki> posiciones;
</pre>
== Parámetros ==
;valor:Constante a trabajar. Tipo [[int]] o [[long]].
;variable:Variable a trabajar. Tipo [[int]] o [[long]].
;posiciones:Cantidad de posiciones bit a desplazar. Valores entre 1~32. Tipo [[int]]
== Comentarios ==
{| class="wikitable col1cen col2cen"
|+Algunas operaciones basicas
|-
! Operacion !! Resultado
|-
|1 <nowiki><<</nowiki> 0||1
|-
|1 <nowiki><<</nowiki> 1||2
|-
|1 <nowiki><<</nowiki> 2||4
|-
|1 <nowiki><<</nowiki> 8||8
|-
|1 <nowiki><<</nowiki> 8||256
|-
|1 <nowiki><<</nowiki> 9||512
|-
|1 <nowiki><<</nowiki> 10||1024
|}
{{Nota|Ver ejemplo 2.}}
== Advertencias ==
* Esta operación desplaza bits descartando los que hayan quedado fuera, no los rota de posición. Por lo tanto, desplazar la cantidad suficiente de bits puede resultar en un valor cero.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
int a = B0000000000000101; //5
int b = a << 3 //B0000000000101000 osea 40
int x = B0000000000000101; //5
int y = B0000000000001110; //14
int result = x << y; //B0100000000000000 - el primer bit fue descartado
</syntaxhighlight>
== Ejemplo 2 ==
Demuestra el comentario.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
for (byte i=0; i<=10; i++) {
Serial.println(1 << i);
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 3 ==
Presenta manualmente un numero tipo [[int]] en binario.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
int c = 12345;
for (byte bits=7; bits>-1; bits--) {
if (c & (1 << bits)) {
Serial.print("1");
}else {
Serial.print("0");
}
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 4 ==
Partiendo del valor 1, se puede obtener el resultado de una potencia con base 2.
<syntaxhighlight lang="c++">
unsigned long resultado = 1;
void setup(){
for (byte pot=0; pot<sizeof(unsigned long) * 8; pot++) {
Serial.print("2^");
Serial.print(pot);
Serial.print(" = ");
resultado <<= 1; // Se desplaza una vez cada iteración de este ciclo.
Serial.println(resultado);
}
}
void loop(){
//Nada
}
</syntaxhighlight>
Imprime los resultados desde 2 a la 0 hasta 2 a la 31.
== Vea también ==
<categorytree mode=all>Operador bit a bit</categorytree>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/en/language/structure/bitwise-operators/bitshiftleft/ Artículo oficial de Arduino sobre el tema (en inglés)]
[[Category:Operador bit a bit]]
2qhu1kuhq4lz4rvew22e89k43603m2r
bitshift right
0
105
4977
4333
2019-09-26T16:27:37Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Desplaza hacia la derecha (hacia el bit menos significativo) una cantidad determinada de bits de una variable o constante; rellenando con ceros.
== Sintaxis ==
<pre>
valor <nowiki>>></nowiki> posiciones;
variable = variable <nowiki>>></nowiki> posiciones;
variable <nowiki>>>=</nowiki> posiciones;
</pre>
== Parámetros ==
;valore:Constante a trabajar. Tipo [[int]] o [[long]].
;variable:Variable a trabajar. Tipo [[int]] o [[long]].
;posiciones:Cantidad de posiciones a desplazar. Entre 1~32. Tipo [[int]].
== Retorno ==
Retorna el numero numero luego del desplazamiento.
== Comentarios ==
{| class="wikitable col1cen col2cen"
|+Algunas operaciones básicas
|-
! Operación !! Resultado
|-
|1024 <nowiki>>></nowiki> 0||1024
|-
|1024 <nowiki>>></nowiki> 1||512
|-
|1024 <nowiki>>></nowiki> 2||256
|-
|1024 <nowiki>>></nowiki> 7||8
|-
|1024 <nowiki>>></nowiki> 8||4
|-
|1024 <nowiki>>></nowiki> 9||2
|-
|1024 <nowiki>>></nowiki> 10||1
|}
{{Nota|Ver ejemplo 2}}
== Advertencias ==
* Esta operación desplaza bits descartando los que hayan quedado fuera, no los rota de posición. Por lo tanto, desplazar la cantidad suficiente de bits puede resultar en un valor cero.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
int a = 0000000000101000; //40
int b = a >> 3 //B0000000000000101 osea 5
int x = B1111111111110000; //-16
int y = B0000000000000011; //3
int result = x >> y; //B1111111111111110
</syntaxhighlight>
== Ejemplo 2 ==
Demuestra el comentario.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
for (byte i=0; i<=10; i++) {
Serial.println(1024 >> i);
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 3 ==
Sirve para realizar una división entera con un cociente potencia de base 2
<syntaxhighlight lang="c++">
analogWrite(pin, analogRead(A0) >> 2);
// Mucho más rápido que map() o una división.
</syntaxhighlight>
'''analogRead(A0) >> 2''' equivale a '''analogRead(A0) / 4'''
== Ejemplo 4 ==
Leer y escribir un dato tipo [[int]] osea dos bytes.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
//Leer
int val0,dato = 12345;
byte val1 = highByte(dato); //Toma mas significativo
byte val2 = lowByte(dato); //Toma menos significativo
//Escribir
val0 = val1; //Escribe MSB
val0 = val0 << 8; //Desplaza a la izquierda
val0 |= val2; //Lo mismo que: val0 += val2;
Serial.println(val0);
}
void loop(){
//Nada
}</syntaxhighlight>
== Ejemplo 5 ==
Descomponer y reconstruir un dato tipo [[long]] osea cuatro bytes.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
//Descomponer
long dat1 = 123456789;
Serial.println(dat1, HEX);
byte val[4];
for (byte i=0; i<4; i++) {
val[i] = lowByte(dat1));
dat1 = dat1 >> 8; //Desplaza 8 bits a la derecha
}
//Reconstruir
long dat2;
for (i=0; i<4; i++) {
dat2 += val[3-i];
if (i != 3){
dat2 = dat2 << 8; //Desplaza 8 bits a la izquierda
}
}
Serial.println(dat2, HEX);
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
* [[not bit a bit]] - (<nowiki>~</nowiki>)
* [[and bit a bit]] - (<nowiki>&</nowiki>)
* [[or bit a bit]] - (<nowiki>|</nowiki>)
* [[xor bit a bit]] - (<nowiki>^</nowiki>)
* [[bitshift left]] - (<nowiki><<</nowiki>)
* [[or bit a bit compuesto]] <nowiki>(|=)</nowiki>
* [[and bit a bit compuesto]] <nowiki>(&=)</nowiki>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Operador bit a bit]]
mmejkrmhc02xv9tp90kfkipsn0ke4y2
boceto
0
308
4542
4541
2019-06-26T23:29:39Z
Kike GL
2
wikitext
text/x-wiki
Un '''boceto''' (sketch) es el nombre que Arduino usa para un programa. Es la unidad de código que se carga y ejecuta en una placa Arduino.
Estos '''bocetos''' están escritos en el editor de texto y se guardan con la extensión de archivo .ino. El editor tiene funciones para cortar/pegar y para buscar/reemplazar texto. El área de mensajes brinda comentarios al guardar y exportar y también muestra los errores. La consola muestra el texto generado por el software [[IDE]] Arduino, incluidos los mensajes de error completos y otra información. La esquina inferior derecha de la ventana muestra la placa configurada y el puerto serie usado. Los botones de la barra de herramientas le permiten verificar y cargar programas, crear, abrir y guardar '''bocetos''' y abrir el monitor en serie para comunicarse con la placa Arduino via puerto serie (USB).
<pre>
<libreria>
Variables globales;
void setup(){
//Algo
}
void loop(){
//Algo
}
</pre>
== Advertencia ==
EL código que pongas fuera de las llaves de [[setup()]] y [[loop()]] no se ejecutara.
== Comentarios ==
* Dentro de las llaves de [[setup()]] debes poner lo que quieres ejecutar una sola vez al inicio.
* Dentro de las llaves de [[loop()]] debes poner lo que quieres ejecutar simpre una y otra vez luego de [[setup()]].
* Las variables que definas fuera de las llaves de [[setup()]] y [[loop()]] son variables [[Variables|globales]] que pueden ser usadas en cualquier pare del '''boceto'''.
== Vea también ==
* [[Estructura]]
* [[IDE]]
* [[setup()]]
* [[loop()]]
* [[memoria]]
* [[UNO]]
* [[Processing]]
== Referencias ==
* [https://www.luisllamas.es/nuestro-primer-programa-en-arduino/ Nuestro primer programa en Arduino] - Luis Llamas
* [https://www.luisllamas.es/instalar-ide-arduino/ Instalar IDE Arduino y otros software util] - Luis Llamas
[[Category:Estructura]]
9g89aohbvmjtyheczofajq3texgj21p
bool
0
52
4685
4684
2019-07-07T01:16:13Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
El tipo de dato '''bool''' o '''boolean''' ocupa un byte (8 bits) y es aquella donde sólo se pueden contener dos posibles valores: [[true / false]], [[HIGH / LOW]], 1 / 0, etc. Dicha variable puede usarse directamente como condición de un [[if... else]], [[while]] y [[do... while]].
Su uso más común es como "banderas" (flag) para cambiar un estado binario en la ejecución (como alternar entre dos jugadores en un juego por turnos), o indicar la salida de un ciclo o bucle. También se puede usar para no repetir una misma comparación en múltiples [[if... else]], al menos donde no tendría sentido verificar constantemente si el resultado pudo haber cambiado en el tiempo.
{{Nota|A diferencia de otros lenguajes, en Arduino (C++), tanto para la asignación en un '''bool''' o '''boolean''', como en una condición; se pueden introducir valores que no sean de este tipo (enteros, punteros y punto flotantes). Al hacerlo, implícitamente ocurre la comparación "diferente de cero"; dicho en otras palabras, sería '''falso''' si el valor ingresado es igual a cero.}}
== Sintaxis ==
<pre>
bool variable [= valor];
</pre>
== Parametros ==
;variable: nombre de la variable a definir.
;valor: los posibles valores son true o false. Pero también puedes usar 0 para falso y cualquier valor diferente de 0 para true y LOW y HIGH.
== Advertencias ==
Un '''bool''' o '''boolean''' a pesar de sólo poder almacenar dos posibles valores, siempre ocupa 1 byte en memoria. En caso de requerir múltiples variables de este tipo, pero a la vez se está quedando corto de memoria [[SRAM]]; en ese caso se recomienda usar la técnica de almacenarlos como bits en un [[byte]] (mira que un bit también tiene sólo dos posibles valores), para eso puedes usar las funciones [[bitRead()]], [[bitWrite()]], [[bitClear()]] y [[bitSet()]].
== Ejemplo 1 ==
<pre>
bool alerta = false;
bool estado = HIGH; //verdadero
bool b = -15; //verdadero
bool residuo = numero % 8; //falso si no hay residuo.
</pre>
== Ejemplo 2 ==
Un ejemplo de parpadeo.
<pre>
bool estado = false;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, estado);
estado = !estado; //Invertir el valor de estado
delay(500);
}
</pre>
== Vea también ==
* [[not]]
* [[if... else]]
* [[while]]
* [[byte]]
* [[bitRead()]]
* [[bitWrite()]]
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Tipo dato]]
slesw3vh33fwdepnpv62gexjl8brzc7
break
0
68
5249
4196
2020-02-04T12:28:30Z
Kike GL
2
/* Ejemplo 1 */
wikitext
text/x-wiki
== Descripción ==
'''break''' se usa para salir de un bucle [[for]], [[while]] o [[do... while]], pasando por alto la condición del bucle normal.
También se usa para delimitar cada case dentro de un [[switch... case]].
== Sintaxis ==
<pre>
break;
</pre>
== Advertencias ==
Nada.
== Ejemplo 1 ==
En el ejemplo el [[for]] termina cuando '''sens > limite''' o luego de 100 lecturas, lo que ocurra primero.
<syntaxhighlight lang="c++">
const int limite = 800;
void setup(){
}
void loop(){
for (byte x=0; x<100; x++){
analogWrite(10, x);
int sens = analogRead(A0);
if (sens > limite){
break;
}
delay(50);
}
}
</syntaxhighlight>
== Ejemplo 2 ==
En el ejemplo al no poner '''break''' luego de los dos primeros cases se ejecutan todos hasta '''break'''. El ultimo case no requiere break porque no hay mas detras.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
}
void loop(){
if (Serial.available()){
var=Serial.read();
switch (var){
case 'A':
case 'B':
case 'C':
Serial.println("Fue A, B o C");
break;
case 'M':
Serial.println("Fue M");
}
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Estructura control</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Estructura control]]
iciqtt5g151lmcyi84vrjpwzh82y7sg
byte
0
49
5156
5155
2020-01-24T16:41:33Z
Kike GL
2
/* Comentarios */
wikitext
text/x-wiki
== Descripción ==
Un '''byte''' almacena un número sin signo de un byte (8 bits), de 0 a 255 (2^8 - 1). Alternativamente puede verse declarado como tipo '''uint8_t''' o '''unsigned char''', sin embargo funciona exactamente igual.
{{Tip|Es importante tener en mente que un numero del tipo '''byte''' puede contener hasta 8 valores 0/1 (que es sinonimo de verdadero/falso) empacados en un solo '''byte''' y que se puede operar con ellos con operadores [[Estructura#Operadores_bit_a_bit|bit a bit]] y funciones internas de [[Funciones#Bit_y_Bytes|bits y byte]].}}
== Sintaxis ==
<pre>
byte variable [= valor];
uint8_t variable [= valor];
unsigned char variable [= valor];
</pre>
== Parametros ==
;variable: nombre de la variable.
;valor: valor entre 0~255. Parámetro opcional.
{| class="wikitable col2cen"
|+Posibles formateadores
!Base!!Prefijo!!Comentario!!Ejemplo
|-
|DEC||ninguno||Dígitos 0~9||123
|-
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
|-
|OCT||0||digitos 0~7||0173
|-
|BIN||B||0 o 1||B1111011
|}
== Comentarios ==
* '''unsigned char''' o '''uint8_t''' es lo mismo que '''byte''' y se prefiere este ultimo.
* La variable del tipo '''byte''' almacenan numero entre 0 y 255 osea 256 números. Ahora te pregunto cuanto es 0 - 1 ? en nuestro ejemplo la respuesta correcta es 255 porque es el numero que esta antes de 0. Exactamente por el otro extremo el numero que sigue de 255 es 0. A esto se le llama lógica boleana. Ahora supongamos que quieres prende un foco por 10 números e inicias el proceso en 22, por lo que preguntas if (números - tiempo = 10), se apagaría cuando números llegue a 32 (32 - 22 = 10). Ahora supón que se prende en 250, cuando apagara ? la respuesta es cuando números llegue a 5 (5 - 250 = 10).
== Advertencias ==
* Si sumas 1 al valor máximo que de 255 pasa a 0.
* Si restas 1 al valor mínimo que de 0 pasa a 255.
<syntaxhighlight lang="c++">
byte a = 255;
a++; //a es 0
byte b = 0;
b--; //b es 255
</syntaxhighlight>
== Ejemplos 1 ==
<syntaxhighlight lang="c++">
byte n = 'A';
byte n = 65; //Valor ASCII de letra A
uint8_t n = 65;
byte x = 0x41; //0x = formato hexadecimal, 65
byte x = 0101; //0 = formato octal, 65
byte x = B1000001; //B = formato binario, 65
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
byte x, y, z = 12; //Error, x e y están declaradas pero no inicializadas.
byte x = 12,y = 12,z = 12; //Ok
</syntaxhighlight>
== Ejemplo 3 ==
En este ejemplo hacemos la variable byte igual a un '''caracter'''.
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(115000);
Serial.println("Letras mayusculas:");
for (char c='A'; c<='Z'; c++){
Serial.write(c); //Imprime el carácter
Serial.print(", dec: ");
Serial.println(c); //Imprime su valor ASCII decimal
delay(100);
}
}
void loop() {
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tipo dato</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/variables/constants/integerconstants/ Guia de referencia de Arduino]
[[Category:Tipo dato]]
juy3rw2i4lxfku7xk39m5kcv0koxw7x
byte()
0
175
4307
4228
2019-06-11T23:45:46Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Convierte un valor en un dato tipo [[byte]].
== Sintaxis ==
<pre>
byte(variable);
</pre>
== Parametros ==
;variable: una variable de tipo [[String]].
== Retorna ==
Retorna un numero tipo [[byte]].
== Advertencias ==
No funciona con cadenas [[string]] ni objetos [[String]].
== Ejemplo ==
<syntaxhighlight lang="c++">
char a = 'A';
byte b = 123;
void setup(){
Serial.begin(9600);
byte valor1 = byte(a);
Serial.println(valor1); //65
int valor2 = long(b);
Serial.println(valor2); //123
unsigned int valor3 = word(b); //123
Serial.println(valor3);
long valor4 = long(b); //123
Serial.println(valor4);
}
void loop(){
//Nada.
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones conversion</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones conversion]]
7ip7qlhm3qxd478f4fzwqza2jodbw7m
calloc()
0
369
4845
2028
2019-07-25T00:53:01Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
== Sintaxis ==
<pre>
</pre>
== Parámetros ==
== Retorno ==
== Comentarios ==
== Advertencias ==
== Ejemplo ==
<pre>
</pre>
== Vea también ==
* [[free()]]
* [[malloc()]]
* [[realloc()]]
== Referencias ==
[[Category:Funciones]]
3y7f9g6e0q3rlrtkioh62lolxb2ufqw
ceil()
0
173
4285
4209
2019-06-11T23:33:18Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Redondea un numero [[float]] hacia arriba.
== Sintaxis ==
<pre>
ceil(valor);
ceil(variable);
</pre>
== Parámetros ==
;valor: valor tipo [[float]] a operar.
;variable: nombre de variable tipo [[float]] a operar.
== Retorno ==
Retorna un numero tipo [[long]].
== Advertencias ==
Nada.
== Ejemplo ==
<pre>
ceil(PI); //4
</pre>
== Vea también ==
<categorytree mode=all>Funciones matematicas</categorytree>
== Referencias externas ==
[[Category:Funciones matematicas]]
rnj41ckk6eaiextll3ea70w83ph1ggx
char
0
51
3672
3671
2019-05-06T18:38:01Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Un '''char''' (caracter) es el tipo de dato mas pequeño para el almacenamiento de números en Arduino porque almacena un valor de 1 byte (8 bit). Esto produce un rango de -128 (-2^7) a 127 (2^7-1).
Mucha gente asocia, quizas por su nombre, que este tipo de datos solo almacena un carácter como tal. Eso es cierto, pero olvida que la logica digital solo conoce de unos y ceros, por lo que en realidad lo que almacena es el código ASCCI de dicho caracter. Cada caracter esta representado por un número entero; y su relación símbolo-valor la podemos encontrar en la llamada [https://es.wikipedia.org/wiki/ASCII#Caracteres_imprimibles_ASCII Tabla ASCII].
Es más, es posible realizar operaciones matemáticas sobre caracteres individuales debido a la razón anterior; pudiendo resultar en otro carácter. Ver ejemplo 4.
== Sintaxis ==
<pre>
char variable [= valor]:
</pre>
== Parametros ==
;variable: nombre de la variable.
;valor: puede ser un numero en el rango, aunque normalmente suele ser un carácter entre comillas simples y lo que se almacena es su valor ASCII. Parámetro opcional.
{| class="wikitable col2cen"
|+Posibles formateadores
!Base!!Prefijo!!Comentario!!Ejemplo
|-
|DEC||ninguno||Dígitos 0~9||123
|-
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
|-
|OCT||0||digitos 0~7||0173
|-
|BIN||B||0 o 1||B1110011
|}
== Advertencias ==
* No es lo mismo asignar un valor entero que un caracter. '''Por ejemplo:''' 1 no es lo mismo que '1' ya que, según la tabla ASCII, este último en realidad equivale a 49. Sin embargo, ambos pueden convivir para ciertas funciones; como obtener el carácter que representa la unidad de un número entero:
<syntaxhighlight lang="c++">
int valor = 536;
char unidad = '0' + (valor % 10);
// A partir de aquí debería de tener asignado el caracter '6'
</syntaxhighlight>
* Si sumas 1 al valor maximo que de 127 pasa a -128.
* Si restas 1 al valor minimo que de -128 pasa a 127.
== Comentarios ==
* Solamente los caracteres ASCII están estandarizados en todas las regiones del mundo y librerías para Arduino; la codificación del rango extendido (la parte negativa del '''char''' o la que va de 128 a 255) suele variar según la implementación. Un típico ejemplo es el problema de imprimir la 'ñ' en el monitor serial, o imprimir el símbolo de grados ('°') en un LCD de caracteres; ambos están en la parte extendida, por eso puede darnos resultados inesperados. Es también por esta razón que si encontramos código con literales (cadenas de caracteres) de un idioma que no utiliza las letras del alfabeto latino (como el ruso o japonés), al imprimirlos en el monitor serial, nos aparece como "basura".
* Hay que notar el [[Serial.print()]] trata de manera diferente a '''char''' que otros tipos como: [[byte]], [[int]], [[float]], etc
== Ejemplo 1 ==
En todos los casos la variable '''caracter'' tomara el mismo valor.
<syntaxhighlight lang="c++">
char caracter = 'A';
char caracter = 65; //DEC
char caracter = 0x41; //HEX
char caracter = 0101; //OCT
char caracter = B1000001; //BIN
</syntaxhighlight>
# Si revisas la [[ASCII table|tabla ASCII]], habrás notado que sigue siendo la misma asignación. Recuerda que para asignar caracteres individuales, estos deben estar entre '''comillas simples'''.
# Es un dato de número decimal entero; por lo tanto esta asignación es válida.
# Es la misma asignación que el anterior, solo que el valor es hexadecimal. Puede ser útil ya que algunas veces nos dan la tabla con valores en hexadecimal.
# Es la misma asignación que el anterior, solo que el valor es octal.
# Es la misma asignación que el anterior, solo que el valor es binario.
== Ejemplo 2 ==
Asignacion multiple.
<syntaxhighlight lang="c++">
char x, y, z = 12; //Error, x e y están declaradas pero no inicializadas.
char x = 'A',y = 12,z = 'Z'; //Ok
</syntaxhighlight>
== Ejemplo 3 ==
Lo que se encierra entre '''comillas dobles''' se conoce como un literal; que básicamente es una matriz (array en ingles) o vector de caracteres (en especial por los <nowiki>[]</nowiki> en el nombre de la variable).
<syntaxhighlight lang="c++">
char texto[] = "Hola mundo de Arduino!";
</syntaxhighlight>
== Ejemplo 4 ==
Este ejemplo muestra como encendemos el LED a bordo enviando desde el monitor serie la letra '''e''' y lo apagas con la letra '''a'''.
<syntaxhighlight lang="c++">
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
if (Serial.available()) {
char entrada = Serial.read();
if (entrada == 'e'){
digitalWrite(LED_BUILTIN, HIGH); //Enciende LED
}else if (entrada == 'a'){
digitalWrite(LED_BUILTIN, LOW); //Apaga LED
}
}
}
</syntaxhighlight>
== Ejemplo 5 ==
Si te preguntas si el tipo '''char''' acepta negativos aquí la demostración.
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(115200);
}
void loop() {
if (Serial.available()) {
char c = Serial.read();
Serial.print("Enviaste: ");
Serial.writen(c); //Muestra la letra
Serial.println(c, DEC);
c = c - 80;
Serial.print("Queda: ");
Serial.println(c, DEC);
}
}
</syntaxhighlight>
== Ejemplo 6 ==
En este ejemplo hacemos la variable char igual a un '''numero'''. El monitor serie solo puede interpretar los caracteres entre 33~126.
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(115000);
Serial.println("Mapa tabla ASCII:");
for (char c=33; c<=126; c++){
Serial.print(c); //Imprime el carácter
Serial.print(", dec: ");
Serial.print(c, DEC); //Imprime su valor ASCII decimal
delay(100);
}
}
void loop() {
//Nada
}
</syntaxhighlight>
{{Nota|Si usas [[byte]], [[int]], [[float]], etc en lugar de '''char''' debes reemplazar el primer Serial.print() por Serial.write().}}
== Ejemplo 7 ==
En este ejemplo hacemos la variable char igual a un '''caracter'''.
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(115000);
Serial.println("Letras mayusculas:");
for (char c='A'; c<='Z'; c++){
Serial.print(c); //Imprime el carácter
Serial.print(", dec: ");
Serial.println(c,DEC); //Imprime su valor ASCII decimal
delay(100);
}
}
void loop() {
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tipo dato</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/variables/data-types/char/ Guia de referencia de Arduino]
[[Category:Tipo dato]]
3zj7uizh1oraejj990fki31qkrgb3jl
char()
0
54
4489
4308
2019-06-24T22:53:36Z
Kike GL
2
/* Advertencias */
wikitext
text/x-wiki
== Descripción ==
Convierte valor numerico a un dato tipo [[char]].
== Sintaxis ==
<pre>
char(variable);
</pre>
== Parámetros ==
;variable: variable de cualquier tipo a evaluar.
== Retorna ==
Retorna un [[char]].
== Advertencias ==
No funciona con cadenas [[string]] o matrices ni objetos [[String]].
== Ejemplo ==
<syntaxhighlight lang="c++">
char a = 'A';
byte b = 123;
void setup(){
Serial.begin(9600);
byte valor1 = byte(a); //65
Serial.println(valor1);
int valor2 = long(b);
Serial.println(valor2); //123
unsigned int valor3 = word(b);
Serial.println(valor3); //123
long valor4 = long(b);
Serial.println(valor4); //123
}
void loop(){
//Nada.
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones conversion</categorytree>
* [[atoi()]] desde matriz
* [[atol()]] desde matriz
* [[strtoul()]] desde matriz
* [[atof()]] desde matriz
* [[objeto.getBytes()]] desde String
* [[objeto.toInt()]] desde String
* [[objeto.toFloat()]] desde String
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones conversion]]
s1fi4egx62gr8fegte0ubd4gw0og5ea
const
0
53
5221
5204
2020-02-02T05:26:14Z
Kike GL
2
/* Ejemplos */
wikitext
text/x-wiki
== Descripción ==
Palabra clave conocida como '''calificadora'''. Hace que el valor asignado inicialmente no pueda ser cambiado tras la inicializacion. Se usa antes del tipo de datos de una variable, para modificar la manera en que el compilador y el [[boceto]] deben tratar dicha variable.
Las constantes son números que se usan directamente en un [[boceto]], como 123 o 3.1416. De forma predeterminada, estos números se tratan como: [[int]] (contantes enteras) o [[float]] (constantes de coma flotante), pero puede cambiar esto incluyendo en '''tipo''' o un subfijo modificador: U (unsigned), L (long) o F (float).
{{Nota|Una diferencia importante entre usar '''const''' o no es que al usarla la variable es almacenada en la memoria [[flash]] en lugar de la escasa [[SRAM]].}}
== Sintaxis ==
<pre>
const [tipo] variable = valor;
</pre>
== Parámetros ==
;tipo: elegir el tipo de dato a almacenar: [[char]], [[byte]], [[int]], [[long]], [[float]], etc de manera explicita o si prefiere puede añadir un subfijo al valor:
{| class="wikitable col2cen"
|+Subfijos
!Tipo!!Subfijo!!Ejemplo
|-
|[[int]]||ninguno||123
|-
|[[unsigned int]]||U||123U
|-
|[[long]]||L||123L
|-
|[[unsigned long]]||UL||123UL
|-
|[[float]]||F||1.23F
|}
;Variable: nombre de variable a definir.
;valor: valor a almacenar en el rango del tipo de dato. Puede usar un prefijo para indicar la '''base''' en que esta expresado valor.
{| class="wikitable col2cen"
|+Prefijos
!Base!!Prefijo!!Comentario!!Ejemplo
|-
|DEC||ninguno||Dígitos 0~9||123
|-
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
|-
|OCT||0||digitos 0~7||0173
|-
|BIN||B||0 o 1||B1110011
|}
== Comentarios ==
* El [[IDE]] dara un error de compilación si se intenta asignar un nuevo valor a una variable '''const''' lo que protege al programador contra un posible error.
* Todas las variables son almacenadas en [[SRAM]] salvo '''const''' que es almacenada en [[flash]].
== Advertencias ==
* Debe preferir '''const''' en lugar de [[define]].
== Ejemplos ==
<syntaxhighlight lang="c++">
const n = 123; //int
const n = 33U; //unsigned int
const n = 9L; //long
const n = 32189UL; //unsigned long
const n = 3.14F; //float
const byte n = 123;
const byte n = B1110011; //binario
const byte n = 0173; //Octal
const byte n = 0x7B; //Hexadecimal
</syntaxhighlight>
== Vea también ==
* [[Palabras reservadas]]
* [[variable publica]]
* [[variable local]]
* [[static]]
* [[volatile]]
* [[extern]]
* [[define|#define]]
* [[matriz]]
* [[Comentarios]] - <nowiki>(//)</nowiki>
== Referencias ==
* [https://www.prometec.net/intro-programacion/ Introduccion a la programacion en Arduino] - Prometec
* [http://www.electrogeekshop.com/diferencia-entre-define-y-const-en-arduino/ Diferencia entre define y const en Arduino] - ElectroGeek
* [https://aprendiendoarduino.wordpress.com/tag/constantes/ Variables en Arduino] - Enrique Crespo
[[Category:Variables]]
apky4cr9yefeczvlik3qcaaj44f3mme
constrain()
0
165
5165
5164
2020-01-31T23:52:05Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Restringe un número para estar dentro de un rango.
== Sintaxis ==
<pre>
constrain(variable, min, max);
</pre>
== Parámetros ==
;variable: Nombre variable numerica a restringir. Cualquier tipo de dato.
;min: valor minimo
;max: valor maximo.
== Retorna ==
* Retorna la '''variable''' si esta entre min y max.
* Retorna la '''min''' si variable <nowiki><</nowiki> min.
* Retorna la '''max''' si variable <nowiki>></nowiki> max.
== Advertencias ==
Nada.
== Ejemplo ==
Limita los valores entre 10 y 150.
<pre>
dato2 = constran(dato1, 10, 150);
</pre>
== Vea también ==
<categorytree mode=all>Funciones matematicas</categorytree>
== Referencia externas ==
* [https://www.arduino.cc/reference/en/language/functions/math/constrain/ Guia de referencia]
[[Category:Funciones matematicas]]
tctnwn24rxjvlc36azd2ry19xh5sf64
continue
0
86
4197
4182
2019-06-11T21:15:38Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
El comando '''continue''' omite el resto de la iteración actual de un ciclo en [[for]], [[while]] o [[do... while]]. Continúa comprobando la expresión condicional del ciclo y avanzando con cualquier iteración posterior.
== Sintaxis ==
<pre>
continue;
</pre>
== Comentarios ==
== Advertencias ==
Nada.
== Ejemplo ==
En este ejemplo hacemos que no cambie el [[analogWrite()]] en el rango de 41~119.
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Estructura control</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Estructura control]]
158xmrg7duqq61ssceddgcdz5lkjhdl
cos()
0
38
4474
4470
2019-06-24T22:39:15Z
Kike GL
2
/* Retornos */
wikitext
text/x-wiki
== Descripción ==
Calcula el coseno de un ángulo (en radianes). El resultado está comprendido entre -1 y 1.
== Sintaxis ==
<pre>
cos(rad);
</pre>
== Parámetros ==
;rad: el ángulo en radianes [[float]]
== Retornos ==
El coseno del ángulo [[float]]. Valores entre -1 y +1.
== Advertencias ==
* El angulo debe estar expresado en radianes entre 0 y [[PI|TWO_PI]].
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
Serial.println(cos(0), 3); //1.000
Serial.println(cos(HALF_PI/2), 3); //0.707
Serial.println(cos(HALF_PI), 3); //0.000
Serial.println(cos(PI), 3); //-1.000
Serial.println(cos(PI+HALF_PI), 3); //0.000
Serial.println(cos(TWO_PI), 3);} //1.000
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
for (float n=0; n<TWO_PI; n+=0.01){
Serial.println(cos(n));
}
}
</syntaxhighlight>
== Vea también ==
* [[sin()]]
* [[tan()]]
* [[asin()]]
* [[acos()]]
* [[atan()]]
* [[PI]]
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones trigonometricas]]
5g01ijcvs3szd2gyjv35l82sla84jwl
decremento
0
212
5034
4732
2019-09-27T00:20:43Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Decrementa en uno la variable dada.
{{Nota|Es lo mismo que variable <nowiki>=</nowiki> variable - 1.}}
== Sintaxis ==
<pre>
variable--;
--variable;
variable = variable - 1;
</pre>
== Retorno ==
Valor de la variable disminuido en uno.
== Comentarios ==
* Cual es la diferencia entre poner el operador delante o atrás de nombre de la variable ?
== Advertencias ==
* El riesgo del desbordamiento (ir más allá de lo que una variable puede almacenar, su rango de valores) sigue estando presente. En este caso sería volver a su valor máximo o pasar a un número positivo.
== Ejemplo 1 ==
Desbordamos el byte.
<syntaxhighlight lang="c++">
byte n = 1;
n--; //0
n--; //255
n--; //254
</syntaxhighlight>
== Ejemplo 2 ==
Nota la diferencia de poner delante o detras.
<syntaxhighlight lang="c++">
byte x = 2;
y = --x; //x=1 y=1
y = x--; //x=0 y=1
</syntaxhighlight>
== Ejemplo 3 ==
Es muy comun usarlo en un [[for]] para hacer cuanta descendente.
<syntaxhighlight lang="c++">
void setup(){
}
void loop(){
for (byte n=9; n>=0; n--){
//Repite 10 veces.
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador aritmetico</categorytree>
<categorytree mode=all>Operador aritmetico compuesto</categorytree>
<categorytree mode=all>Operador logico</categorytree>
== Referencias ==
[[Category:Operador aritmetico]]
jefj3rrhozsxu9v2x2508axfdzeptpk
define
0
443
5207
5206
2020-02-02T04:38:25Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
'''#define''' permite al programador dar un nombre a un valor constante antes de compilar el [[boceto]]. Las constantes definidas en Arduino no ocupan ningún espacio de memoria [[SRAM]] ya que el compilador reemplaza las referencias a estas constantes con por su valor definido en tiempo de compilación.
Esto puede tener algunos efectos secundarios no deseados, sin embargo, si por ejemplo, un nombre de la constante que había sido definido con #defined está incluido en algún otro nombre de constante o variable. En ese caso el texto se sustituye por el número #defined (o texto).
En general, se prefiere la palabra clave [[const]] para las constantes que se definen y se debe usar en lugar de #define.
== Sintaxis ==
<pre>
#define variable valor
</pre>
== Parámetros ==
;variable:nombre de la constante
;valor:a reemplazar
== Retorno ==
Ninguno.
== Advertencia ==
Debe empezar con # y no debe haber ; al final de la linea
== Ejemplo ==
<syntaxhighlight lang="c++">
#define LED = 13
void setup(){
pinMode(LED, OUTPUT);
}
void loop(){
//Nada
}
</syntaxhighlight>
Al momento de compilar hace una macrosustitucion y queda asi:
<syntaxhighlight lang="c++">
void setup(){
pinMode(13, OUTPUT);
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
* [[variable publica]]
* [[variable local]]
* [[matriz]]
* [[include]]
* [[const]]
* [[extern]]
* [[volatile]]
== Referencias ==
* [http://manueldelgadocrespo.blogspot.com/p/define.html define] - Manuel Delgado
[[Category:Variables]]
t6vwmwtxepo2pyv9oiuh4veu6t3csqu
delay()
0
29
4921
4920
2019-09-21T14:02:17Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Hace una pausa en el boceto durante el tiempo (en milisegundos) especificado como parámetro. (1 segundo = 1000 milisegundos)
{{Tip|Los programadores serios evitan el uso de '''delay()''' para la sincronización de los eventos de más de 10 milisegundos a menos que el [[boceto]] sea muy simple. Se recomienda usar [[millis()]] en su lugar.}}
== Sintaxis ==
<pre>
delay(ms);
</pre>
== Parámetros ==
;ms: el número de milisegundos para hacer una pausa, tipo [[unsigned long]].
== Retornos ==
Nada.
== Advertencias ==
* Si bien es fácil crear un LED parpadeante con la función '''delay()''' y muchos ejemplos usan retardos cortos para tareas tales como supresión de [[Rebote]]s de un pulsador, el uso de la funcion delay() en un [[boceto]] tiene inconvenientes significativos. Ninguna lectura de los sensores, cálculos matemáticos, o la manipulación de pines puede realizarse hasta que la función '''delay()''' termine. Un enfoques alternativo para controlar del tiempo es la función [[millis()]] porque el boceto continua ejecutando.
* Ciertas cosas si funcionan mientras que la función '''delay()''' está controlando Arduino, debido a que la función '''delay()''' no deshabilita las interrupciones y están funcionan como es debido, así mismo la comunicación serie y [[analogWrite()|PWM]] continua normalmente.
== Ejemplo ==
<syntaxhighlight lang="c++">
const byte led = 13; //LED
void.setup() {
pinMode (led, OUTPUT); //Establece el pin digital como salida
}
void.loop() {
digitalWrite(led, HIGH); //Prende LED
delay(500); //Espera medio segundo
digitalWrite(ledPin, LOW); //Apaga LED
delay(500); //Espera medio segundo
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones tiempo</categorytree>
* [[Tip 3]]
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/delay/ Guía de Referencia de Arduino]
[[Category:Funciones tiempo]]
bjbrbibcrgfii72mqh6r1swvl3ivsp3
delayMicroseconds()
0
44
4281
4236
2019-06-11T23:28:49Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Pausa la ejecución del programa durante la cantidad de microsegundos especificada. Al igual que [[delay()]], no interfiere en las salidas PWM ni en las tareas en segundo plano (interrupciones).
Este retraso lo realiza con la mayor exactitud posible que pueda ofrecer el sistema; tanto así que para ciertas frecuencias de reloj, utiliza instrucciones en lenguaje ensamblador para mantener la sincronía.
== Sintaxis ==
<pre>
delayMicroseconds(tiempo);
</pre>
== Parámetros ==
;tiempo: el lapso (en microsegundos) en el que el programa se detiene ([[unsigned int]]).
== Retornos ==
Nada.
== Advertencias ==
* Debido a que esta función no interfiere con las interrupciones, estas podrían comprometer fuertemente la exactitud del retraso (lo prolongan más de lo que debería). A menos que las deshabilites con [[noInterrupts()]] o lo hagas dentro de una rutina de este tipo, no se recomienda utilizar esta función para generar (o leer) trenes de pulsos cuyo margen de error sea muy pequeño.
== Comentarios ==
* A diferencia de [[delay()]], [[millis()]] y [[micros()]], esta función no depende de temporizador alguno; lo que lo vuelve utilizable sin interrupciones o dentro de una rutina de interrupción (aunque en la mayoría de casos se desaconseja su uso).
* A pesar de ser algo inusual (y en cierto modo hasta absurdo pensar), debido al tipo de parámetro, es posible realizar un retraso de 65535 microsegundos (casi como hacer '''delay(66)''') o 4294967296 microsegundos (4295 segundos o 1 hora y 12 minutos); dependiendo de la arquitectura del microcontrolador.
* Colocar un cero de parámetro es prácticamente el equivalente a colocar un uno; solamente el proceso que "por debajo" conlleva invocar una función y salir de esta, ya genera un retraso de esa duración. Dicho efecto se vuelve despreciable en microcontroladores que trabajan a 40 MHz o más.
== Ejemplo ==
<syntaxhighlight lang="c++">
while (true) {
digitalWrite(pin, HIGH);
delayMicroseconds(500);
digitalWrite(pin, LOW);
delayMicroseconds(500);
}
// Genera una señal cuadrada de más o menos 1 KHz. El sobrecargo del ciclo hace este proceso un tantito más lento, y además las ocasionales interrupciones hacen que dicha frecuencia no se mantenga estable.
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones tiempo</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones tiempo]]
b7brhmfu13ys1kd3kkn9vj7lrin6l8z
detachInterrupt()
0
41
4262
1760
2019-06-11T23:10:52Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Desconecta la interrupción dada.
== Sintaxis ==
<pre>
detachInterrupt(interrupt);
detachInterrupt(digitalPinToInterrupt(pin));
detachInterrupt(pin); //solo DUE, Zero y MKR100
</pre>
== Parámetros ==
;interrupt: el número de interrupción a deshabilitar. Ver [[attachInterrupt()]] para más detalles.
;pin: el número de pin de la interrupción a deshabilitar (solo DUE, Zero y MKR100)
== Retornos ==
Nada.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
const byte pulsador = 2;
volatile bool estado = LOW;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(pulsador, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(pulsador), parpadea, CHANGE);
}
void parpadea(){
estado = !estado;
}
void loop(){
digitalWrite(LED_BUILTIN, estado);
}
</syntaxhighlight>
== Vea también ==
* [[attachInterrupt()]]
* [[interrupts()]]
* [[noInterrupts()]]
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [http://www.gammon.com.au/interrupts Nick Gammon]
[[Category:Funciones interrupciones]]
8gwmo9rr4v9etxe5su1ve427f00d523
diferente
0
100
4997
4713
2019-09-26T23:39:43Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Comparador de desigualdad. Que son diferentes.
== Sintaxis ==
<pre>
variable != valor;
variable != expresion;
variable1 != variable2;
</pre>
== Retorna ==
Verdadero si son diferentes y falso si son iguales.
== Advertencias ==
Nada,
== Ejemplo ==
<pre>
if (a != b){
//Son diferentes
}else{
//Son iguales
}
</pre>
== Vea también ==
<categorytree mode=all>Operador logico</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Operador comparador]]
qw9b0ualumqlp7cwzl67g1i7ydmr3a3
digitalPinToInterrupt()
0
284
4265
1126
2019-06-11T23:12:13Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Esta función no permite traducir el pin digital real al número de interrupción específico. Normalmente, debe usar '''digitalPinToInterrupt(pin)''', en lugar de colocar un número de interrupción directamente en su boceto. Los pines específicos con interrupciones, y su asignación para interrumpir el número varía en cada tipo de placa.
El uso directo de números de interrupción puede parecer simple, pero puede causar problemas de compatibilidad cuando el boceto se ejecuta en una placa diferente.
Sin embargo, los bocetos más antiguos a menudo tienen números de interrupción directa. A menudo se usaron el número 0 (para el pin digital 2) o el número 1 (para el pin digital 3).
La tabla a continuación muestra los pines de interrupción disponibles en varios Arduinos.
{| class="wikitable col2cen col3cen col4cen col5cen col6cen"
|+Pines de interrupcion en Arduino
!Arduino!!INT.0!!INT.1!!INT.2!!INT.3!!INT.4!!INT.5
|-
|[[UNO]]||2||3|| || || ||
|-
|[[MEGA]]||2||3||21||20||19||18
|-
|32u4||3||2||0||1||7||
|-
|[[DUO]]||colspan=6|Todos los pines
|}
Tenga en cuenta que en la tabla a continuación, los números de interrupción se refieren al número que se pasará a [[attachInterrupt()]]. Por razones históricas, esta numeración no siempre se corresponde directamente con la numeración de interrupción en el chip ATmega (por ejemplo, int.0 corresponde a INT4 en el chip ATmega2560).
== Sintaxis ==
<pre>
digitalPinToInterrupt(pin);
</pre>
== Parametros ==
;pin: numero de pin
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
* [[attachInterrupt()]]
* [[detachInterrupt()]]
* [[interrupts()]]
* [[noInterrupts()]]
== Referencias externas ==
[[Category:Funciones interrupciones]]
el3e7xf9z09fzkzb33s64ktn7mk50ow
digitalRead()
0
26
5053
5051
2019-10-07T22:02:40Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
Lee el valor del pin digital dando un resultado. Los valores pueden ser [[HIGH / LOW]].
{{Tip|Los pines tanto analógicos como digitales de '''entrada''' no necesitan ser definidos con [[pinMode()]].}}
== Sintaxis ==
<pre>
digitalRead(pin);
</pre>
== Parámetros ==
;pin: es el numero del pin digital a usar (0~13 + 14~19). Puedes usar [[const]] [[byte]] para de definir el numero de pin.
== Retorno ==
Devuelve el valor del pin: [[HIGH / LOW]].
== Comentarios ==
{{Tip|Este comando tarda 58 ciclos de CPU en salidas digitales sin PWM y 72 ciclos en salidas digitales con PWM.}}
== Advertencias ==
En muchos ejemplo se ve que usan una variable de tipo [[int]] para definir el pin a usar. Esto es un grave error por dos motivos:
# La variable sera almacenada en memoria [[SRAM]] porque se espera que su valor cambie durante la ejecución del [[boceto]], pero normalmente en los pines esto nunca ocurre, por lo que es preferible usar [[const]] que es almacenada en [[flash]].
# El tipo [[int]] ocupa 2 byte. Es suficiente usar el tipo [[byte]] (0~255) que solo ocupa 1 byte.
== Ejemplo 1 ==
Cuando presionamos el pulsador el LED a bordo se prende, soltamos y se apaga. Poner un pulsador entre pin digital 3 y GND.
<syntaxhighlight lang="c++">
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(3, INPUT_PULLUP);
}
void loop(){
if (digitalRead(3) == LOW){
digitalWrite(LED_BUILTIN, HIGH); //Prende LED
}else{
digitalWrite(LED_BUILTIN, LOW); //Apaga LED
}
}
</syntaxhighlight>
{{Nota|digitalRead() retorna un verdadero mientas no estas pulsando el botón gracias a su configuración INPUT_PULLUP, asi que es exactamente lo mismo si pones '''!digitalRead(3)''' como condición. Ver Ejemplo 1a.}}
== Ejemplo 1a ==
Cuando presionamos el pulsador el LED a bordo se prende, soltamos y se apaga. Poner un pulsador entre pin digital 3 y GND.
<syntaxhighlight lang="c++">
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(3, INPUT_PULLUP);
}
void loop(){
if (!digitalRead(3)){
digitalWrite(LED_BUILTIN, HIGH); //Prende LED
}else{
digitalWrite(LED_BUILTIN, LOW); //Apaga LED
}
}
</syntaxhighlight>
== Ejemplo 1b ==
Cuando presionamos el pulsador el LED a bordo se prende, soltamos y se apaga. Poner un pulsador entre pin digital 3 y GND.
<syntaxhighlight lang="c++">
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(3, INPUT_PULLUP);
}
void loop(){
if (!digitalRead(3)){
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); //Conmuta LED
}
}
</syntaxhighlight>
== Ejemplo 2 ==
Cuando presionamos una vez el pulsador el LED a bordo se prende. Pulsamos nuevamente y se apaga. Poner un pulsador entre pin digital 2 y GND.
<syntaxhighlight lang="c++">
bool valor,anterior;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(2, INPUT_PULLUP);
}
void loop(){
valor = digitalRead(2);
if (!valor && anterior){
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); //Conmuta LED
}
anterior = valor;
}
</syntaxhighlight>
== Ejemplo 3 ==
Cada vez que presionamos el pulsador cuenta una mas en binario. Poner un pulsador entre pin digital 2 y GND, mas 8 LED en pines 3 al 10 con su respectiva resistencia de 330 ohms.
<syntaxhighlight lang="c++">
bool valor,anterior;
byte n;
void setup(){
pinMode(2, INPUT_PULLUP);
for (byte i=3; i<11; i++){
pinMode(i, OUTPUT);
}
}
void loop(){
valor = digitalRead(2);
if (!valor && anterior){
n++;
}
anterior = valor;
for (byte i=3; i<11; i++){
digitalWrite(i, bitRead(n, i-3));
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones pines</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/variables/constants/constants/ Niveles lógicos en Arduino]
* [https://playground.arduino.cc/ArduinoNotebookTraduccion/DigitalIO Playground]
* [https://programarfacil.com/podcast/26-arduino-entradas-y-salidas/ Entradas y salidas] - Luis del Valle
* [https://www.luisllamas.es/salidas-digitales-en-arduino/ Salidas digitales en Arduino] - Luis Llamas
* [https://naylampmechatronics.com/blog/39_Resistencias-Pull-Up-y-Pull-Down.html Pull-Up y Pull-Down] - Laylamp
* [https://itp.nyu.edu/physcomp/lessons/microcontrollers/digital-input-output/ Digital input/output] - ITP Informatica Fisica
* [http://arduino.perut.org/Arduino_17.htm Puertos Arduino] - Kike_GL
[[Category:Funciones pines]]
orbxwxhak5dxqac08aw44fobueqvtmg
digitalWrite()
0
27
4770
4769
2019-07-17T21:50:51Z
Kike GL
2
/* Comentarios */
wikitext
text/x-wiki
== Descripción ==
Envía al puerto digital definido previamente como OUTPUT el valor HIGH o LOW (poniendo en 1 o 0 la salida). El pin se puede especificar ya sea como una variable o como una constante (0~13 + 14~19).
{{Nota|Debes usar [[pinMode()]] para hacer la definición previamente.}}
== Sintaxis ==
<pre>
digitalWrite(pin, valor);
</pre>
== Parámetros ==
;pin: es el numero del pin digital a usar (0~13 + 14~19). Puedes usar [[const]] [[byte]] para de definirla.
;valor: por lo general se usa las palabras reservadas HIGH o LOW, pero puedes usar 0, 1, false o true. Puedes usar una variable [[byte]] para definirla.
== Retorno ==
Nada.
== Comentarios ==
* Los terminales de Arduino, por defecto, están configurados como entradas, por lo tanto no es necesario definirlos en el caso de que vayan a trabajar como entradas.
* Los pines configurados como INPUT (entrada) quedan, bajo el punto de vista eléctrico, como entradas en alta impedancia.
* Los pines configurado como OUTPUT (salida) se dice que están en un estado de baja impedancia y pueden proporcionar 40 mA de corriente a otros dispositivos y circuitos. Esta corriente es suficiente para alimentar un LED (no olvides poner una resistencia en serie de 220 ohms o mas), pero no es lo suficiente grande como para alimentar cargas de mayor consumo como relés o motores.
* Un cortocircuito en las patillas Arduino provocará una corriente elevada que puede dañar o destruir el chip ATmega.
{{Tip|Este comando tarda 63 ciclos de CPU en salidas digitales sin PWM y 77 ciclos en salidas digitales con PWM.}}
{| class="wikitable col2cen col3cen"
|+Velocidad de reacción
|-
! Metodo !! KHz !! Ciclos
|-
| digitalWrite() || 142 || 56
|-
| CLR() || 4000 || 2
|-
| PORTB <nowiki>|=</nowiki> _BV() || 4000 || 2
|}
== Advertencias ==
En muchos ejemplo se ve que usa una variable de tipo [[int]] para definir el pin a usar. Esto es un grave error por dos motivos:
# Una variable sera almacenada en memoria [[SRAM]] porque se espera que su valor cambie durante la ejecución del [[boceto]], pero normalmente en los pines esto nunca ocurre, por lo que es preferible usar [[const]] que es almacenada en [[flash]].
# El tipo [[int]] ocupa 2 byte. Es suficiente usar el tipo [[byte]] (0~255) que solo ocupa 1 byte.
== Ejemplo 1 ==
Estos comando se ejecuta una sola vez al estar en [[setup()]].
<syntaxhighlight lang="c++">
void setup(){
for (byte n=2; n<=7; n++){
pinMode(n, OUTPUT);
}
pinMode(17, OUTPUT);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, 1);
digitalWrite(5, 0);
digitalWrite(6, true);
digitalWrite(7, false);
digitalWrite(17, HIGH); //Pone en HIGH el pin analogico A3
}
void loop(){
//nada
}
</syntaxhighlight>
== Ejemplo 2 ==
Primero se preparan los pines digitales 6~10 como salidas. Luego se conmutan (se prende si esta apagado y viceversa) cada medio segundo alternativamente cada LED. Debes conectar 5 LED con sus respectivas resistencias de 220 ohms.
<syntaxhighlight lang="c++">
void setup(){
for (byte i=6; i<=10; i++){
pínMode(i, OUTPUT);
digitalWrite(i, LOW);
}
}
void loop(){
for (byte i=6; i<=10; i++){
digitalWrite(i, !digitalRead(i));
delay(500);
}
}
</syntaxhighlight>
== Ejemplo 3 ==
Parpadea el LED a bordo.
<syntaxhighlight lang="c++">
void setup() {
DDRB = DDRB | 32; //Configura el pin digital 13 como OUTPUT, no altera el resto. 32=B00100000;
}
void loop() {
PORTB = PORTB ^ 32; //Invertido estado del bit 5 (pin digital 13), no altera el resto.
delay(500);
}
</syntaxhighlight>
== Ejemplo 4 ==
Tenemos 2 pulsadores, uno para prender (boton1) y otro para apagar (boton2) un LED . Pero si pulsamos 3 veces seguidos el boton1 se apaga el LED y se prende el LED a bordo indicando un bloqueo durante 15 segundos.
<syntaxhighlight lang="c++">
const byte boton1 = 2; //Boton prender y bloquear
const byte boton2 = 3; //Bontos apagar
const byte LED = 5; //LED
bool val1, anterior1, val2, anterior2, estado, parar;
byte n;
unsigned long t;
void setup(){
Serial.begin(9600);
pinMode(boton1, INPUT);
pinMode(boton2, INPUT);
pinMode(LED, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
//Boton 1
val1 = digitalRead(boton1);
if (val1 && !anterior1){
estado = true;
n++;
Serial.print(estado);
Serial.print(", ");
Serial.println(n);
}
anterior1 = val1;
//Boton 2
val2 = digitalRead(boton2);
if (val2 && !anterior2){
estado = false;
n=0;
Serial.print(estado);
Serial.print(", ");
Serial.println(n);
}
anterior2 = val2;
//Pulsaste 3 veces seguidas boton 1
if (n == 3){
t = millis();
parar = true;
n = 0;
}
//Bloquea 15 segundos
if (millis()-t < 15000 && parar){
estado = false;
digitalWrite(LED_BUILTIN, HIGH);
}else{
parar = false;
digitalWrite(LED_BUILTIN, LOW);
}
//Maneja LED
if (estado){
digitalWrite(LED, HIGH);
}else{
digitalWrite(LED, LOW);
}
}
</syntaxhighlight>
== Ejemplo 5 ==
En este ejemplo conectamos un display 7 segmentos entre los pines digitales 2 al 8 (segmentos a-f) cada uno con su resistencia de 330 ohmos. Luego mostramos alternativamente cada letra de HOLA de manera secuencial.
<syntaxhighlight lang="c++">
const byte hola[]= {B1110110,B0111111,B0111000,B1110111}; //HOLA
void setup() {
for (byte n=2; n<9; n++){
pinMode(n, OUTPUT);
}
}
void loop(){
for (byte i=0; i<4; i++){
for (byte s=2; s<9; s++){
digitalWrite(s, bitRead(hola[i], s-2));
}
delay(1000);
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones pines</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/variables/constants/constants/ Niveles lógicos en Arduino]
* [https://playground.arduino.cc/ArduinoNotebookTraduccion/DigitalIO Playground]
* [https://programarfacil.com/podcast/26-arduino-entradas-y-salidas/ Entradas y salidas] - Luis del Valle
* [http://manueldelgadocrespo.blogspot.com/p/digitalwrite.html digitalWrite()] de Manuel Delgado
* [https://aprendiendoarduino.wordpress.com/tag/digitalwrite/ digitalWrite] de Enrique Crespo
* [https://blog.bricogeek.com/noticias/arduino/arduino-funcion-digitalwrite-mas-rapida/ Funcion digitalWrite mas rapida] de BricoGeek
[[Category:Funciones pines]]
1hu1s894rost13jodvf0atuja5xof4d
division compuesta
0
216
5039
5038
2019-09-27T00:25:11Z
Kike GL
2
/* Ejemplo 2 */
wikitext
text/x-wiki
== Descripción ==
Divide la variable entre un valor y guarda el resultado en la misma variable
{{Tip|Es lo mismo que variable <nowiki>=</nowiki> variable / valor}}
== Sintaxis ==
<pre>
variable /= valor;
variable = variable / valor;
</pre>
== Parámetros ==
;variable: Nombre de la variable a operar. Puede ser de cualquier tipo: [[char]], [[byte]], [[int]], [[long]], [[float]].
;valor: Valor del mismo tipo que variable.
== Retorno ==
Devuelve la operación de división en la misma variable.
== Advertencias ==
Nada.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
byte n = 12;
n /= 2; //6
n /= 2; //3
</syntaxhighlight>
== Ejemplo 2 ==
Este ejemplo muestra el numero 100 y luego divide entre 2 en cinco ocaciones (50, 25, 12, 6, 3). Nota que en la 3ra oportunidad hay un redondeo gracias a que la variable solo soporta números enteros.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
int numero = 100;
Serial.println(numero);
for (byte n=0; n<5; n++){
numero /= 2;
Serial.println(numero);
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador aritmetico</categorytree>
<categorytree mode=all>Operador aritmetico compuesto</categorytree>
== Referencias ==
[[Category:Operador aritmetico compuesto]]
66ewvqm66erjdqztd4gqobotymnu4nu
división
0
94
5033
4722
2019-09-27T00:20:19Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
La división es una de las cuatro operaciones aritméticas primarias. El operador /(barra inclinada) opera en dos operandos para producir el resultado.
== Sintaxis ==
<pre>
variable = valor / expresion;
</pre>
== Advertencias ==
* Al hacer operaciones aritméticas preste atención a los tipo de dato involucrados.
* Por lógica, si la variable donde se almacenará el resultado no tiene signo, este jamás será negativo aunque uno de los operandos sea negativo.
* La división entre enteros nunca produce fracciones, ni siquiera almacenando su resultado en un [[float]] o [[double]]. Para forzar la preservación de las cifras decimales, uno de los operandos debe ser (o convertirse a) un punto flotante.
* La división por cero no es motivo para "colgar" la ejecución de un programa; sin embargo el resultado es indeterminado. Experimentando con la arquitectura AVR, se descubrió que la división por cero de enteros tiene como resultado todos los bits de la variable en 1; pero por alguna razón las funciones [[Serial|print()]] imprimen dicho resultado como el valor máximo de [[unsigned long]] ("4294967295"); a pesar de que la variable sea de tipo [[byte]], con signo (en este caso debería ser siempre -1), y se haya comprobado que si es un tipo menor a [[unsigned long]], nunca se sobrescriben 4 bytes en memoria.
* La división por cero entre puntos flotantes ([[float]] o [[double]]) resulta en un valor llamado "infinito" (inf); se presume que se debe a la misma forma que se manejaría entre enteros.
== Ejemplo ==
<pre>
int x = 20;
int y = 5;
x = x/2; //10
x /= y; //2 (Divide x entre y)
float f = 5 / 2; // Según una de las advertencias, el resultado sería 2.0 (no se preservaron las cifras decimales)
f = 5.0 / 2; // Ya que uno de los operandos es un punto flotante, el resultado ahora sí sería 2.5
f = float(x) / 3; // Al convertir una variable entera a un punto flotante, los decimales también se preservan
// En este punto de la ejecución, f valdría 0.6666667
</pre>
== Vea también ==
<categorytree mode=all>Operador aritmetico</categorytree>
<categorytree mode=all>Operador aritmetico compuesto</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/structure/arithmetic-operators/division/ Guia de referencia de Arduino]
* [https://aprendiendoarduino.wordpress.com/2018/04/08/operadores-5/ Aprendiendo Arduino]
[[Category:Operador aritmetico]]
3dtivd1i4vflr6vzucdeho2wyea9em5
do... while
0
87
4183
4170
2019-06-11T21:07:02Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
El bucle '''do... while''' funciona de la misma manera que el bucle [[while]], con la excepción de que la condición se comprueba al final del bucle, por lo que el bucle se ejecutará siempre al menos una vez.
== Sintaxis ==
<pre>
do{
}while (condicion)
</pre>
== Parametros ==
;condicion: expresión que debe ser evaluada como verdadera para repetir el bucle.
== Comentarios ==
* Normalmente se usa cuando de ante mano no sabes el numero de interacciones que requieres y le dejas a alguna variable la desicion.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
byte x = 0;
do {
//Repite algo 100 veces
x++;
}
while (x < 100);
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Estructura control</categorytree>
== Referencias externas ==
* [http://arduino.cc/en/Reference/DoWhile Guia de referencia de Arduino]
* [https://aprendiendoarduino.wordpress.com/tag/estructuras-de-control/ Estructura de control] - Enrique Crespo
* [http://manueldelgadocrespo.blogspot.com/p/bucle-dowhile.html El bucle do while] - Manuel Delgado
[[Category:Estructura control]]
085l7chl2ke01ha0ewxzpgpl51h8pid
double
0
198
3682
3681
2019-05-06T18:41:34Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Número de punto flotante de doble precisión (respecto a [[float]]).
== Sintaxis ==
<pre>
double variable [= valor];
</pre>
== Parámetros ==
;variable: variable a definir
;valor: valor a asignar
== Advertencias ==
* En Arduinos con ATmega (AVR en general), '''double''' ocupa 4 bytes (32 bits); por lo que es igual a [[float]] y no hay ganancia en precisión.
* En Arduino [[DUE]], '''double''' ocupa 8 bytes (64 bits); por lo tanto sí mejora la precisión.
== Ejemplo 1 ==
<pre>
double areaCirculo = PI * sq(r); // Pi * r^2, r: radio del círculo
double pruebaDecimales = 1.234567890123456789; // ¿Podrá almacenar tantos dígitos decimales?
</pre>
== Ejemplo 2 ==
Si tienes un [[float]] o un '''double''' puedes especificar el numero de decimales.
<syntaxhighlight lang="c++">
Serial.print(PI, 2); //3.14
Serial.println(PI, 6); //3.141593
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tipo dato</categorytree>
== Referencias ==
[[Category:Tipo dato]]
fiatkhsbi5y88xxnbemvc51y7i3i8kj
extern
0
499
5201
5095
2020-02-02T04:29:16Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Palabra clave conocida como '''calificadora'''. Se usa antes del tipo de datos de una variable, para modificar la manera en que el compilador y el [[boceto]] deben tratar dicha variable.
La declaración de una variable '''extern''' es una directiva del compilador. El compilador es un software que traduce el código Arduino en el código de máquina, que son las instrucciones reales para el chip ATmel en el Arduino.
{{Nota|Una variable debe ser declarada '''extern''' cada vez que no es definida en el mismo [[boceto]] a fin de que el compiladr no arrroje el error variable no encontrada.}}
== Sintaxis ==
<pre>
extern tipo variable [= valor];
extern variable [= Pvalor];
</pre>
== Parámetros ==
;tipo: define el tipo de variable. [[char]], [[byte]], [[int]], [[long]], [[float]], etc
{| class="wikitable col2cen"
|+Subfijos
!Tipo!!Subfijo!!Ejemplo
|-
|[[int]]||ninguno||123
|-
|[[unsigned int]]||U||123U
|-
|[[long]]||L||123L
|-
|[[unsigned long]]||UL||123UL
|-
|[[float]]||F||1.23F
|}
;variable:nombre de la variable.
;valor:valor a almacenar en el rango del tipo de dato.
;Pvalor:valor a almacenar en el rango del tipo de dato con prefijo de formateo.
{| class="wikitable col2cen"
|+Prefijos
!Base!!Prefijo!!Comentario!!Ejemplo
|-
|DEC||ninguno||Dígitos 0~9||123
|-
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
|-
|OCT||0||digitos 0~7||0173
|-
|BIN||B||0 o 1||B1110011
|}
== Advertencias ==
* Cuando declaras una variable en un archivo .cpp para que esta sea accesible desde el archivo .ino
<pre>
#include archivo.h
void setup(){
Serial.begin(9600);
Serial.print(variable);
}
void loop(){
//Nada
}
</pre>
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
extern n = 123 //int
extern n = 123U //unsigned int
extern n = 123L //long
extern n = 123UL //unsigned long
extern n = 1.23F //float
extern byte n = 123;
extern byte n = B1110011;
extern byte n = 0173;
extern byte n = 0x7B;
</syntaxhighlight>
== Ejemplo 2 ==
Conmuta el LED a bordo cuando se pulsa botón. Conectar pulsador entre pin 7 y GND.
<syntaxhighlight lang="c++">
volatile bool estado = LOW;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(7, INPUT_PULLUP);
attachInterrupt(0, cambia, CHANGE);
}
void cambia(){
estado = !estado;
}
void loop(){
digitalWrite(LED_BUILTIN, estado);
}
</syntaxhighlight>
== Vea también ==
* [[variable publica]]
* [[variable local]]
* [[matriz]]
* [[static]]
* [[const]]
* [[define|#define]]
* [[Palabras reservadas]]
* [[Comentarios]] - <nowiki>(//)</nowiki>
== Referencias externas ==
[[Category:Variables]]
rxwksexiymybifs3xx1qyrjpgwr5zd0
flash
0
333
3769
3763
2019-05-06T22:25:45Z
Kike GL
2
/* Descripción */
wikitext
text/x-wiki
== Descripción ==
Es la memoria de programa donde esta el bootloader y se almacenan los [[boceto|bocetos]] ya compilados. Se mantiene aun si apagamos nuestro Arduino. Usualmente entre 1~4 Mb. Es el equivalente al disco duro de un computador. Se puede ejecutar un programa desde la memoria flash, pero no es posible modificar los datos, sino que es necesario copiar los datos en la [[SRAM]] para codificarlos. Esta memoria usa la misma tecnología que las memorias USB (pendrive), tarjetas SD y algunos discos de estado solido. Esta memoria tiene una vida útil de unos 100,000 ciclos de escritura, así que cargando 10 programas al día durante 30 años podrías dañar la memoria flash de tu Arduino.
Ademas desde la versión 1.0 del [[IDE]] de Arduino, se introdujo la macro [[F()]]. Esta sintaxis se usa para almacenar cadenas en la memoria [[flash]] en lugar de en la [[SRAM]]. No es necesario cargar ninguna librería para usar la macro [[F()]].
{{Nota|Recuerda que al incluir una librería, estas añadiendo programas y variables, lo que aumentará el uso de memoria [[flash]] y [[SRAM]]. Algunas librerías hacen un uso intensivo de la memoria '''flash''' y [[SRAM]].}}
{|class="wikitable col2cen col3cen col4cen"
|+Memoria en cada Arduino
!Tipo!!Arduino [[UNO]]!!Arduino [[MEGA]]!!Arduino [[MKR1000]]
|-
|[[flash]]||32K||256K||256K
|-
|Flash-bootloader||0.5K||8K||-
|-
|[[SRAM]]||2K||8K||32K
|-
|[[EEPROM]]||1K||4K||-
|}
== Advertencias ==
En el caso que el [[boceto]] ocupe más memoria '''flash''', el [[IDE]] te avisa de que no puede cargarlo en Arduino. Cada vez que compilas un boceto el [[IDE]] de Arduino te informa de la memoria flash que ocupa el programa y la RAM ocupada por las variables globales y el espacio que queda para las variables locales. Como recomendación, si se supera el 70~75% de la [[SRAM]] con las variables globales es muy probable que Arduino se quede sin memoria [[SRAM]] para trabajar.
== Ejemplo ==
<syntaxhighlight lang="c++">
Serial.println("Esta cadena se almacena en memoria SRAM"); //Usa 42 bytes de memoria SRAM
Serial.println(F("Esta cadena se almacenada en memoria flash"));
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>memoria</categorytree>
== Referencias ==
[[Category:memoria]]
rriyg13d4hgtnpz58r2zoezwf39wnz9
float
0
65
5230
5229
2020-02-02T18:45:35Z
Kike GL
2
/* Ejemplo 2 */
wikitext
text/x-wiki
== Descripción ==
El formato numérico de 4 bytes (32 bits), son números de '''punto flotante''' osea con decimales. Están comprendidos entre -3.4E38 y +3.4E38.
Este tipo de números se usan a menudo para aproximar los valores analógicos y continuos porque tienen mayor resolución que los números enteros.
{{Nota|Si hacemos operaciones matemáticas con '''float''', es necesario agregar un punto decimal, de lo contrario, será tratado como un int.}}
Los 32 bits esta distribuidos asi:
* EL primer bit es el signo (1 = negativo)
* Los 8 siguientes son la parte entera.
* Los 23 restantes son los decimales.
== Sintaxis ==
<pre>
float variable [= valor];
variable = valorF;
</pre>
== Parametros ==
;variable: Nombre de variable a definir.
;valor: El valor asignado a la variable que debe contener un punto.
;valorF: Forzar tipo con subfijo '''F'''. Puedes omitir la palabra float antes de nombre de variable.
{| class="wikitable col2cen"
|+Posibles formateadores
!Base!!Subfijo!!Ejemplo
|-
|[[unsigned int]]||U||n = 123U
|-
|[[long]]||L||n = 123L
|-
|[[unsigned long]]||UL||n = 123UL
|-
|[[float]]||F||n =12.3F
|}
== Comentarios ==
Las constantes de punto flotante también se pueden expresar en una variedad de notación científica. 'E' y 'e' son aceptados como indicadores de exponente válidos.
== Advertencias ==
* Los '''float''' tienen sólo 6-7 dígitos decimales de precisión. Eso significa que el número total de dígitos, no es el número a la derecha del punto decimal.
* Los números de punto flotante '''no son exactos''' y pueden producir resultados extraños si se comparan. Por ejemplo 6.0 / 3.0 puede no ser igual 2.0. En su lugar debe comprobar que el valor absoluto de la diferencia entre el número es menor que un número pequeño.
* A diferencia de otras plataformas, donde se puede obtener una mayor precisión mediante el uso de un [[double]] (por ejemplo, hasta 15 dígitos), en el Arduino, el [[double]] es del '''mismo tamaño que el float'''.
* Las operaciones matemáticas de punto flotante también son '''mucho más lenta''' que las operaciones matemáticas con enteros en los cálculos que realizan, por lo que deben evitarse si, por ejemplo, un bucle tiene que correr a gran velocidad para una función crítica de sincronización. Los programadores suelen convertir los cálculos de punto flotante a entero para aumentar la velocidad.
== Ejemplo 1 ==
Asignaciones directas.
<syntaxhighlight lang="c++">
x = 1.23F;
float n = 2.32;
float z = 2.34E-5 //0.0000234
</syntaxhighlight>
== Ejemplo 2 ==
Operaciones con numeros.
8/2 es un [[int]]. para que sea '''float''' debe ser 8.0/2, 8/2.0 o 8.0/2.0
<syntaxhighlight lang="c++">
int x = n/2 //1
float y = n/2 //1
float y = n/2.0 //1.16
float n = 8.0/2.0; //Entre 1.99 y 2.01
</syntaxhighlight>
== Ejemplo 3 ==
Dividir 100/1024 y luego multiplicarlo nuevamente por 100 no da lo mismo.
<syntaxhighlight lang="c++">
float n = 100.0/1024.0;
n = 100.0 * n //No es lo mismo
float n = 100.0 * 1024.0;
n = n / 100.0 //Es lo mismo
</syntaxhighlight>
== Ejemplo 4 ==
Si tienes un '''float''' o un [[double]] puedes especificar el numero de decimales.
<syntaxhighlight lang="c++">
Serial.print(PI, 2); //3.14
Serial.println(PI, 6); //3.141593
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tipo dato</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/float/ Guia de referencia de Arduino]
* [https://playground.arduino.cc/ArduinoNotebookTraduccion/Datatypes Playground]
* [https://manueldelgadocrespo.blogspot.com/p/float.html Arduino en español] - Manuel Delgado
* [https://aprendiendoarduino.wordpress.com/2015/03/26/tipos-de-datos/ Aprendiendo Arduino] - Enrique Crespo
* [http://rufianenlared.com/float/ Float, eres problematico y Arduino lo sabe] - Rufian en la red
[[Category:Tipo dato]]
4nbu4dmla7bh8vr1v05aievx91wxfcy
float()
0
178
4827
4826
2019-07-19T00:46:37Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Convierte un valor numérico de cualquier tipo a [[float]].
== Sintaxis ==
<pre>
float(variable);
</pre>
== Parametros ==
;variable: variable de cualquier tipo a evaluar. [[char]], [[byte]], [[int]], [[long]], [[double]].
== Retorna ==
Retorna un numero tipo [[float]].
== Advertencias ==
No funciona con cadenas [[string]] ni objetos [[String]].
== Ejemplo ==
<syntaxhighlight lang="c++">
char a = 'A';
byte b = 123;
int c = -12345;
void setup(){
Serial.begin(9600);
byte valor1 = byte(a);
Serial.println(valor1);
int valor2 = long(b);
Serial.println(valor2);
unsigned int valor3 = word(b);
Serial.println(valor3);
long valor4 = long(b);
Serial.println(valor4);
float valor5 = float(c);
Serial.println(valor5);
}
void loop(){
//Nada.
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones conversion</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/en/language/variables/data-types/float/ Guia de referencia de Arduino]
* [http://rufianenlared.com/float/ Float, eres problematico y Arduino lo sabe] - Rufian de la Red
[[Category:Funciones conversion]]
1t1nbhtv4cdscrwyvqtne0vk8g8c2cd
floor()
0
174
4287
4210
2019-06-11T23:33:49Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Redondea un numero tipo [[float]] hacia abajo.
== Sintaxis ==
<pre>
floor(valor);
floor(variable);
</pre>
== Parámetros ==
;valor: valor tipo [[float]] a operar.
;variable: nombre de variable tipo [[float]] a operar.
== Retorno ==
Retorna un numero tipo [[long]].
== Advertencias ==
Nada.
== Ejemplo ==
<pre>
floor(PI); //3
</pre>
== Vea también ==
<categorytree mode=all>Funciones matematicas</categorytree>
== Referencias externas ==
[[Category:Funciones matematicas]]
f8jwbsdeuai6s6yl29a0otlc0a4bbkr
for
0
60
5287
5258
2020-06-06T21:29:35Z
Kike GL
2
/* Ejemplo 4 */
wikitext
text/x-wiki
== Descripción ==
La declaración '''for''' se usa para repetir un bloque de sentencias encerradas entre llaves un número determinado de veces. Cada vez que se ejecutan las instrucciones del bucle se vuelve a comprobar la condición.
{{Nota|Se usa para cuando tu sabes de antemano cuantas veces debes repetir el bucle.}}
== Sintaxis ==
<pre>
for (declaracion-initialization; condicion; incremento) {
//instrucción(es);
}
</pre>
== Parametros ==
;declaracion-initialization: declaración e inicialización de variables a utilizar en el ciclo.
;condicion: condicional que debe cumplir desde el principio
;incremento: incremento o decremento. Son un conjunto de instrucciones (separadas por coma ''',''' ) que se ejecutan cada vez que se completa una iteración del ciclo. A diferencia de la condición, esta parte nunca ocurre la primera vez.
{{Nota|Todos los parámetros se pueden omitir (sin embargo los dos ''';''' siguen siendo obligatorios), pero si se omite la condición, esta siempre se asumirá verdadera; lo que resultaría en un bucle infinito hasta encontrarse con una sentencia [[break]].}}
== Advertencias ==
Nada.
== Ejemplo 1 ==
En este ejemplo conectamos un LED en un pin digital PWM y hacemos variar iluminacion con [[analogWrite()]].
<syntaxhighlight lang="c++">
const byte pin = 10; //LED
void setup() {
pinMode(pin, OUTPUT);
}
void loop(){
for (byte i=0; i<=255; i++){
analogWrite(pin, i); //PWM
delay(100);
}
}
</syntaxhighlight>
== Ejemplo 2 ==
Revisa este curioso ejemplo donde no hay el 3er termino en el for() que normalmente incrementa la variable.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
for (unsigned long start=millis(); millis()-start<1000;){
Serial.println(start);
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 3 ==
En este ejemplo es el [[break]] quien termina el ciclo for.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
for (byte n=0; n<254; n++){
Seral.println(n);
if (n>10){
break;
}
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 4 ==
Error de novato. Como ya sabes [[byte]] soporta valores entre 0 y 255. Asi que '''siempre''' se cumplira la condicion n<256 y este for nunca terminara.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
for (byte n=0; n<256; n++){
Seral.println(n);
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 5 ==
En matemáticas, la sucesión o serie de '''Fibonacci''' es la siguiente sucesión infinita de números naturales: 0,1,1,2,3,5,8,13,21,34,55,89,144..
<syntaxhighlight lang="c++">
byte s[13] ;
void setup(){
Serial.begin(9600);
for (byte n=0; n<13; n++) {
if (n==0 || n==1) {
s[0]=0;
s[1]=1;
}else{
s[n] = s[n-1]+s[n-2];
}
Serial.println(s[n]);
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Estructura control</categorytree>
== Referencias externas ==
* [http://arduino.cc/en/Reference/For Guia de referencia de Arduino]
* [https://aprendiendoarduino.wordpress.com/tag/estructuras-de-control/ Estructuras de control] - Enrique Crespo
[[Category:Estructura control]]
n4jrrnzprf8efbvraz4xfuqi5xc7j36
free()
0
367
2030
2026
2018-07-15T13:36:14Z
Kike GL
2
Kike GL trasladó la página [[free]] a [[free()]] sin dejar una redirección
wikitext
text/x-wiki
== Descripción ==
Desasignar bloque de memoria.
Un bloque de memoria asignado previamente por una llamada a [[malloc()]], [[calloc()]] o [[realloc()]] está desasignado, volviendo a estar disponible para otras asignaciones.
== Sintaxis ==
<pre>
free(ptr);
</pre>
== Parámetros ==
;ptr: Puntero a un bloque de memoria previamente asignado con [[malloc()]], [[calloc()]] o [[realloc()]].
== Retorno ==
Nada
== Comentarios ==
* Solo se modifica el almacenamiento al que se hace referencia por ptr.
* No se accede a ninguna otra ubicación de almacenamiento mediante la llamada.
* Si la función libera una unidad de almacenamiento que se reutiliza mediante una llamada a funciones de asignación (como [[calloc()]] o [[malloc()]], las funciones se sincronizan de tal manera que la desasignación ocurre completamente antes de la siguiente asignación.
== Advertencias ==
* Si ptr no apunta a un bloque de memoria asignado con las funciones [[malloc()]], [[calloc()]] o [[realloc()]], causa un comportamiento indefinido.
* Si ptr es un puntero nulo, la función no hace nada.
* Tenga en cuenta que esta función no cambia el valor de ptr en sí, por lo tanto, todavía apunta a la misma ubicación (ahora no válida).
== Ejemplo ==
<pre>
void funcion(){
int * buffer1, * buffer2, * buffer3;
buffer1 = (int*) malloc(100* sizeof(int));
buffer2 = (int*) calloc(100, sizeof(int));
buffer3 = (int*) realloc(buffer2, 500*sizeof(int));
free (buffer1);
free (buffer3);
}
</pre>
== Vea también ==
* [[malloc()]]
* [[calloc()]]
* [[realloc()]]
== Referencias ==
* [http://www.cplusplus.com/reference/cstdlib/free Cplusplus]
[[Category:Funciones]]
j16z02vg8f6l3zuzg42qprwefwq66q7
goto
0
88
4561
4199
2019-06-27T01:25:58Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Transfiere el flujo del programa a un punto etiquetado en el programa
== Sintaxis ==
<pre>
goto etiqueta;
</pre>
== Parametros ==
;Etiqueta: Marca de llegada de goto. Palabra terminada en ''':'''
== Advertencias ==
* El uso de '''goto''' se desaconseja en la programación C++ ya que no es necesaria, pero si se usa juiciosamente, se pueden simplificar ciertos programas.
* La razón por la que muchos programadores desaprueban el uso de goto es que con el uso incontrolado de sentencias goto, es fácil para crear un programa con el flujo del programa no definido, muy difícil de depurar.
* Dicho esto, hay casos en que una instrucción goto puede venir bien y simplificar la codificación. Una de estas situaciones es para salir de anidado de los bucles, o de los bloques lógicos if, en una determinada condición.
== Ejemplo ==
<syntaxhighlight lang="c++">
for (byte g=255; g>-1; g--){
for (byte b = 0; b < 255; b++){
if (analogRead(0) > 250){
goto rescate;
}
//más instrucciones ...
}
}
rescate:
//más instrucciones ...
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Estructura control</categorytree>
== Referencias externa==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Estructura control]]
fb8jzn8s5fqjd6kwh17upgk4msdtktn
highByte()
0
195
4698
4320
2019-07-14T17:40:36Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Extrae el byte de orden superior (MSB) en [[int]] o el segundo byte más bajo de un tipo de datos más grande como [[long]].
== Sintaxis ==
<pre>
highByte(variable);
</pre>
== Parámetros ==
;variable: variable a evaluar que deberá ser [[int]], [[long]], [[float]], [[unsigned int]] o [[unsigned long]]
== Retornos ==
Retorna byte mas significativo.
== Advertencias ==
Cuidado al trabajar con tipo [[long]] que es de 4 bytes, porque highByte() se refiere al que esta a la izquierda del LSB y no se refiere al MSB.
<pre>
long val = 0x11223344;
highByte(val); //33
lowByte(val); //44 (LSB)
</pre>
== Ejemplo 1 ==
Descomponer en [[byte]]s y reconstruir un [[int]].
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
//Descomponer
int dat1 = 12345;
Serial.println(dat1, HEX); //0x3039
byte val1 = highByte(dat1); //0x30 (MSB)
byte val2 = lowByte(dat1); //0x39 (LSB)
Serial.println("-------");
//Reconstruir
int dat2;
dat2 = val1; //Tomamos MSB
dat2 <<= 8; //Desplazamos 8 bits a la izquierda
dat2 |= val2; //Añadimos LSB
Serial.println(dat2, HEX); //0x3039
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 2 ==
Descomponer en [[byte]]s y reconstruir un [[long]].
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
//Descomponer
long dat1 = 123456789;
Serial.println(dat1, HEX);
byte val[4];
for (byte i=0; i<4; i++) {
val[i] = lowByte(dat1);
Serial.println(val[i], HEX);
dat1 >>= 8; //desplazar aqui
}
Serial.println("-------");
//Reconstruir
long dat2;
for (byte i=0; i<4; i++) {
dat2 |= val[3-i]; //Meter en LSB
if (i 3){ //Menor que 3
dat2 <<= 8; //desplazar aqui
}
}
Serial.println(dat2);
}
void loop(){
//Nada
}
********* Ejemplo incompleto no permite *******
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones bit y byte</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones bit y byte]]
2l655ahnek5bci0cjl1ga1i3eopj4vb
if... else
0
55
4560
4367
2019-06-27T01:23:44Z
Kike GL
2
/* Ejemplo 4 */
wikitext
text/x-wiki
== Descripción ==
El condicional '''if()''' permite un mayor control del flujo de código al permitir ejecutar o no un grupo de instrucciones según el resultado de una condición.
{{Tip|También llamado condicional simple.}}
Además se puede usar '''else''' dentro de las llaves de modo que, si la condición es falsa, se ejecute un segundo juego de códigos.
También se puede anidar condicionales simples con else if(), de manera que se pueden establecer varias estructuras condicionales anidadas de forma que sean mutuamente excluyentes. Recuerde sin embargo qué sólo un conjunto de declaraciones se llevará a cabo dependiendo de las condiciones impuestas.
{{Nota|Tenga en cuenta que un bloque '''if()''' se puede usar con o sin un bloque '''else''' y viceversa. Se permite un número ilimitado de ramificaciones usando '''else if()'''.}}
== Sintaxis ==
Condicional simple
<pre>
if (condicion) {
//Ejecuta si condición es verdadera
}
</pre>
Condicional compuesta
<pre>
if (condicion) {
//Ejecuta si condición es verdadera
}else{
//Ejecuta si condición es falsa
}
</pre>
Condicionales anidadas
<pre>
if (condicion 1) {
//Ejecuta si condición 1 es verdadera
}else if (condicion 2){
//Ejecuta si condición 1 es falsa y condicional 2 es falsa
}else{
//Ejecuta si ambas condiciónes son falsa
}
</pre>
== Parámetros ==
;condición: es una expresión que se evalúa como verdadera o falsa.
== Comentarios ==
* Si se omiten las llaves solo se ejecuta una instrucción.
* Si tienes una función que de por si da como resultado true/false la puedes usar directamente sin evaluar. Eso implica que es lo mismo poner digitalRead(13) que digitalRead(13) == true.
* Recuerda que true es lo mismo que HIGH o 1 y false es lo mismo que LOW o 0.
{{Nota|Se puede poner varias expresiones unidas por los operadores lógicos [[or]] o [[and]].}}
== Advertencias ==
* No confundir el comparador de [[igualdad]] (<nowiki>==</nowiki>) con el operador de [[asignacion]] (<nowiki>=</nowiki>).
== Ejemplo 1 ==
Se puede comprobar una entrada analógica y realizar una acción si el valor de la entrada es menor que 500 y realizar otra acción distinta si la entrada es 500 o mayor.
<syntaxhighlight lang="c++">
if (analogRead(A3) < 500) {
//acción A
}else{
//acción B
}
</syntaxhighlight>
== Ejemplo 2 ==
Aquí usamos dos comparaciones con distintas expresiones.
<syntaxhighlight lang="c++">
if (analogRead(A3) < 500){
//instrucciones A
}else if (digitalRead(LED_BUILTIN)){
//instrucciones B
}else{
//instrucciones C
}
</syntaxhighlight>
== Ejemplo 3 ==
Con este código producimos un parpadeo.
<syntaxhighlight lang="c++">
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
if (digitalRead(LED_BUILTIN)){
digitalWrite(LED_BUILTIN, LOW) //Apaga LED
}else{
digitalWrite(LED_BUILTIN, HIGH) //Prende LED
}
delay(500);
}
</syntaxhighlight>
{{Tip|No es necesario poner if (digitalRead(LED_BUILTIN) <nowiki>==</nowiki> HIGH).}}
== Ejemplo 4 ==
Podemos usar una condicional simple dentro de [[Serial.print()]] o [[Serial.println()]]
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
for (byte n=2; n<14; n++){
pinMode(n, INPUT);
}
}
void loop(){
for (byte n=2; n<14; n++){
Serial.print(n);
Serial.print(" = ");
Serial.println(digitalRead(n)?"Prendido":"Apagado");
}
Serial.println("---------");
delay(1000);
}
</syntaxhighlight>
== Ejemplo 5 ==
En este ejemplo no cambiamos el valor del PWM entre 86~126. Nota que al definir la variable tipo [[byte]] luego del 255 el siguiente numero es 0 nuevamente.
<syntaxhighlight lang="c++">
byte n;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
n++;
if (n>85 && n<169){
analogWrite(LED_BUILTIN, 127);
}else{
analogWrite(LED_BUILTIN, n);
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Estructura control</categorytree>
== Referencias ==
* [http://arduino.cc/en/Reference/If Guia de referencia de Arduino]
* [https://programarfacil.com/blog/arduino-blog/if-else-arduino/ if el Arduino] - Programar Facil
* [https://aprendiendoarduino.wordpress.com/2017/10/14/estructuras-de-control-4/ Estructuras de control] - Enrique Crespo
[[Category:Estructura control]]
f83n5brlnhrbitnqv5mdb1rbpak6rnh
igualdad
0
99
5002
5001
2019-09-26T23:42:06Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Se llama operador de igualdad a un único signo igual doble.
== Sintaxis ==
<pre>
[tipo] variable == valor;
[tipo] variable == expresion;
[tipo] variable == variable1;
</pre>
== Parámetros ==
;tipo:Tipo de dato Arduino a almacenas en la variable. Opcional, solo se usa la primera vez.
;variable:Nombre de la variable a asignar.
;valor:Valor a asignar a la variable
;expresion:Formula con operadores aritméticos incluidos (+, -, *, /, %)
;variable1:Otra variable del mismo tipo.
{|class="wikitable"
|+Tipos de dato en Arduino
!Tipo!!Ocupa!!Rango
|-
|[[char]]||1 byte (8 bits)||-128 a 127
|-
|[[byte]]||1 byte (8 bits)||0 a 255
|-
|[[int]]||2 byte (16 bits)||-32,768 a 32,767
|-
|[[unsigned int]] o [[word]]||2 byte (16 bits)||0 a 65,535
|-
|[[long]]||4 byte (32 bits)||-2,147,483,648 a 2,147,483,647
|-
|[[unsigned long]]||4 byte (32 bits)||0 a 4,294,967,295
|-
|[[float]]||4 byte (32 bits)||-3.4E38 a 3.4E38
|}
{| class="wikitable col2cen"
|+Posibles formateadores
!Base!!Prefijo!!Comentario!!Ejemplo
|-
|DEC||ninguno||Dígitos 0~9||123
|-
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
|-
|OCT||0||digitos 0~7||0173
|-
|BIN||B||0 o 1||B1111011
|-
|BIN||0b||0 o 1, funciona para más de 8 bits||0b1111011
|}
== Retorna ==
Verdadero si son iguales y falso si no lo son.
== Advertencias ==
* No confunda el operador de asignación = (signo igual individual) con el operador de comparación == (doble signos igual), que evalúa si los dos expresiones son iguales.
== Ejemplo ==
<syntaxhighlight lang="c++">
if (x == 9){
//Es igual
}else{
//Es diferente
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador comparador</categorytree>
<categorytree mode=all>Operador logico</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Operador comparador]]
qcl8nqc2fms5zr8wgoqqqpdc84ecm35
include
0
204
5240
5239
2020-02-02T18:59:15Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Se usa para incluir librerías externas en tu [[boceto]]. Esto le da al [[boceto]] de Arduino acceso a un gran grupo de librerías Arduino estándar prefabricadas que traen nuevos métodos y funciones. El nombre de la librería deberá estar entre < y >.
{{Nota|No debe poner terminador de punto y coma o el compilador dará un error.}}
== Sintaxis ==
<pre>
#include <libreria.h>
#include "libreria.h"
</pre>
== Parametros ==
;<>:Es un archivo de libreria externa
;"":Es un archivo del proyecto
== Retorno ==
Nada.
== Comentarios ==
* También se puede usar '''#include''' para incluir archivos .ino el [[IDE]] junta todos los archivo .ino en un archivo temporal y luego compila. Así no da errores de variables no encontradas "was not declared in this scope".
== Advertencia ==
Tenga en cuenta que '''#include''', similarmente a #[[define]], no tiene un terminador de punto y coma, y el compilador dará lugar a mensajes de error si se agrega una.
== Ejemplos ==
En este ejemplo hay un solo pulsador en pin 2.
<syntaxhighlight lang="c++">
#include <Bounce2.h>
Bounce rebote = Bounce(); //Instancia objeto
void setup() {
pinMode(2, INPUT_PULLUP);
rebote.attach(2); //Cuando ya esta definido el pin
rebote.interval(5);
pinMode(13, OUTPUT);
}
void loop() {
rebote.update(); //Actualiza
if (rebote.read()) {
digitalWrite(13, digitalReac(13)); //Conmuta LED
}
}
</syntaxhighlight>
== Vea también ==
* [[Comentarios]] <nowiki>(//)</nowiki>
* [[define|#define]]
* [[const]]
== Referencias ==
* [https://www.arduino.cc/reference/en/language/structure/further-syntax/include/ include] - Arduino
* [https://aprendiendoarduino.wordpress.com/2016/11/16/librerias-arduino-2/ librerias] - Enrique Crespo
* [http://manueldelgadocrespo.blogspot.com/p/include.html Include] - Manuel Delgado
* [https://www.prometec.net/intro-programacion/ Introduccion a la programacion] - Prometec
[[Category:Estructura]]
epu3execczb2qald0oup7zk2wcd9zml
incremento
0
211
5032
4724
2019-09-27T00:19:44Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Incremente la variable en una unidad.
{{Nota|Es lo mismo que variable <nowiki>=</nowiki> variable + 1.}}
== Sintaxis ==
<pre>
variable++;
++variable;
variable = variable + 1;
</pre>
== Parámetros ==
;variable: Nombre de la variable a operar. Puede ser de cualquier tipo: [[char]], [[byte]], [[int]], [[long]], [[float]].
;valor: Valor del mismo tipo que variable.
== Retorno ==
Valor de la variable aumentado en uno.
== Advertencias ==
* El riesgo del desbordamiento (ir más allá de lo que una variable puede almacenar, su rango de valores) sigue estando presente. En este caso sería volver a cero o pasar a un número negativo.
== Ejemplo 1 ==
Desbordamos el [[byte]].
<syntaxhighlight lang="c++">
byte n = 254;
n++; //255
n++; //0
n++; //1
</syntaxhighlight>
== Ejemplo 2 ==
Nota la diferencia de poner delante o detras.
<syntaxhighlight lang="c++">
byte x = 2;
y = ++n; //x=3 y=3
y = n++; //x=4 y=3
</syntaxhighlight>
== Ejemplo 3 ==
Es muy comun usarlo en un [[for]] para cuenta ascendente.
<syntaxhighlight lang="c++">
for (byte n=0; n<5; n++){
//Repite 5 veces
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador aritmetico</categorytree>
<categorytree mode=all>Operador aritmetico compuesto</categorytree>
== Referencias ==
[[Category:Operador aritmetico]]
fwhg4b31hl78i25cxoewcbddav2j8mh
int
0
63
5153
5152
2020-01-24T16:33:34Z
Kike GL
2
/* Sintaxis */
wikitext
text/x-wiki
== Descripción ==
Los '''int''' (enteros) son el tipo de datos primario para el almacenamiento de números.
En el Arduino [[UNO]] (y otras placa basadas en el ATmega) un '''int''' almacena un valor de 2 byte (16 bit). Esto produce un rango de -32,768 (-2^15) a 32,767 (2^15-1).
En el Arduino [[DUE]], un '''int''' almacena un valor de 4 byte (32 bit). Esto produce un rango de -2,147,483,648 (-2^31) a 2,147,483,647 (2^31-1).
Los '''int''' almacenan números negativos con una técnica llamada complemento matemático a 2. El bit más alto, a veces llamado bit de "signo" es la bandera que define el número como negativo. El resto de los bits se invierte y se les añade 1.
== Sintaxis ==
<pre>
int variable [= valor];
int16_t variable [= valor]; //Solo UNO
int32_t variable [= valor]; //Solo MEGA
</pre>
== Parámetros ==
;variable: nombre de a variable a definir.
;valor: numero en el rango. Parámetro opcional.
{| class="wikitable col2cen"
|+Posibles formateadores
!Base!!Prefijo!!Comentario!!Ejemplo
|-
|DEC||ninguno||Dígitos 0~9||123
|-
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
|-
|OCT||0||digitos 0~7||0173
|-
|BIN||B||0 o 1||B1111011
|}
== Comentarios ==
* En Arduino [[MEGA]] es un tipo de 2 bytes (16 bits) que almacena numeros entre -32,768 (-2^15) y 32,767 (2^15-1).
* Los números negativos se almacenan con una técnica llamada '''matemática del complemento a 2'''. El bit más alto, a veces denominado bit de "signo", marca el número como un número negativo. El resto de los bits se invierten y se agrega 1.
== Advertencias ==
* El Arduino se encarga de tratar los número negativos por nosotros, por lo que las operaciones aritméticas trabajan de forma transparente de la manera esperada. Sin embargo, podemos encontrarnos con una complicación inesperada con el operador [[bitshift right]] (>>) (desplazamiento de bit a la derecha).
* Si sumas 1 al valor maximo que de 32,767 pasa a -32,768.
* Si restas 1 al valor minimo que de -32,768 pasa a 32,767.
<syntaxhighlight lang="c++">
int a = 35767;
a++; //-32,768
int b = -31768;
b--; //32,767
</syntaxhighlight>
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
int num; //Variable declarada pero no inicializada.
int x,y,z; //Multiple variable declaradas pero no inicializadas.
int x=0,y=1,z=2; //Multiples variables declaradas e inicializadas.
int n = 'A';
int n = 65;
int n = 0x41; //0x = formato hexadecimal, 65
int n = 0101; //0 = formato octal, 65
int n = B1000001; //B = formato binario, 65
</syntaxhighlight>
== Ejemplo 2 ==
En el siguiente ejemplo usuario pretende usar 4K de [[SRAM]] cuando Arduino [[UNO]] solo tiene 2K.
<syntaxhighlight lang="c++">
int var[2000]; //Error
</syntaxhighlight>
== Ejemplo 3 ==
Asignamos un caracter ASCII al int y operamos.
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(115000);
Serial.println("Letras mayusculas:");
for (int c='A'; c<='Z'; c++){
Serial.write(c); //Imprime el carácter
Serial.print(", dec: ");
Serial.println(c); //Imprime su valor ASCII decimal
delay(100);
}
}
void loop() {
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tipo dato</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/int/ Guia de referencia de Arduino]
[[Category:Tipo dato]]
enih9ed4q2p35lzn9mge5smy6krhzd3
int()
0
176
4310
4226
2019-06-11T23:46:52Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Convierte un valor en un dato tipo [[int]].
== Sintaxis ==
<pre>
int(variable);
</pre>
== Parámetros ==
;variable: variable de cualquier tipo a evaluar.
== Retorna ==
Retorna un numero tipo [[int]].
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
char a = 'A';
byte b = 123;
void setup(){
Serial.begin(9600);
byte valor1 = byte(a);
Serial.println(valor1);
int valor2 = long(b);
Serial.println(valor2);
unsigned int valor3 = word(b);
Serial.println(valor3);
long valor4 = long(b);
Serial.println(valor4);
}
void loop(){
//Nada.
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones conversion</categorytree>
* [[atoi()]]
* [[objeto.toInt()]]
* [[objeto.toFloat()]]
* [[objeto.getBytes()]]
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones conversion]]
0zhlh6hxrv4n489x4u1oxgpsgtlrhz5
interrupts()
0
42
4941
4260
2019-09-22T16:35:58Z
Kike GL
2
/* Advertencias */
wikitext
text/x-wiki
== Descripción ==
Vuelve a habilitar las interrupciones (después de que han sido desactivadas por [[noInterrupts()]]. Las interrupciones permiten que ciertas tareas importantes que suceden en segundo plano sean activadas por defecto.
== Sintaxis ==
<pre>
interrupts();
cli();
</pre>
== Parámetros ==
Nada.
== Retornos ==
Nada.
== Advertencias ==
* Algunas funciones no trabajarán mientras las interrupciones están deshabilitadas, y las comunicaciones entrantes pueden ser ignoradas. Las interrupciones pueden alterar ligeramente la sincronización de código, sin embargo, y pueden ser desactivadas de los sectores especialmente críticos del código.
* No puedes usar [[Serial.print()]] dentro de una interrupcion.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup() {
//Nada
}
void loop(){
noInterrupts();
//Aquí el código sensible al tiempo
interrupts();
//Aqui el resto del código
}
</syntaxhighlight>
== Vea también ==
* [[attachInterrupt()]]
* [[detachInterrupt()]]
* [[noInterrupts()]]
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [https://www.luisllamas.es/que-son-y-como-usar-interrupciones-en-arduino/ Luis Llamas]
* [http://www.gammon.com.au/interrupts Nick Gammon]
[[Category:Funciones interrupciones]]
08wwhrnwcxazgjrde9nfjvc0et3glkt
isAlpha()
0
84
4294
4218
2019-06-11T23:38:12Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Analiza si parámetro es una letra. a-z + A-Z.
== Sintaxis ==
<pre>
isAlpha(dato);
isAlpha(variable);
</pre>
== Parametro ==
;dato: dato a analizar.
;variable: nombre de variable a analizar.
== Retorno ==
Devuelve true si la dato o variable es una letra del alfabeto o false si no lo es.
== Advertencias ==
Nada.
== Ejemplo 1 ==
<pre>
isAlpha('a'); //verdadero
isAlpha('M'); //verdadero
isAlpha('3'); //falso
isAlpha(' '); //falso
isAlpha('%'); //falso
</pre>
== Ejemplo 2 ==
Envía un carácter desde el monitor serie y veras si es de este tipo o no.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte caracter = Serial.Read();
if (isAlpha(caracter)){
Serial.print("SI");
}else{
Serial.print("NO");
}
Serial.println(" es Alpha");
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones caracteres</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones caracteres]]
jkixrapxci697wsk7grqae0bh6ak6hk
isAlphaNumeric()
0
72
4295
4221
2019-06-11T23:38:28Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Analiza si variable es un carácter alfanumérico (número o letra). a-z + A-Z + 0-9.
== Sintaxis ==
<pre>
isAlphaNumeric(dato);
isAlphaNumeric(variable);
</pre>
== Parametros ==
;variable: nombre de variable a analizar.
;dato: carácter a evaluar entre comillas simples.
== Retorno ==
Devuelve verdadero si la variable contiene un valor alfanumerico o falso si no lo es.
== Advertencias ==
Nada.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
isAlphaNumeric('a'); //verdadero
isAlphaNumeric('M'); //verdadero
isAlphaNumeric('3'); //verdadero
isAlphaNumeric(' '); //falso
isAlphaNumeric('%'); //falso
</syntaxhighlight>
== Ejemplo 2 ==
Envía un carácter desde el monitor serie y veras si es de este tipo o no.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte caracter = Serial.Read();
if (isAlphaNumeric(caracter)){
Serial.print("SI");
}else{
Serial.print("NO");
}
Serial.println(" es Alpha");
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones caracteres</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones caracteres]]
fefl8y8ou3nsqm9aiwrqv5fksnq1i0a
isAscii()
0
73
4686
4296
2019-07-07T01:17:19Z
Kike GL
2
/* Descripción */
wikitext
text/x-wiki
== Descripción ==
Analiza si dato o variable es un carácter [[ASCII table]] (que sea un carácter entre 0-127 de la tabla).
== Sintaxis ==
<pre>
isAscii(dato);
isAscii(variable);
</pre>
== Parámetros ==
;dato: dato a analizar.
;variable: nombre de variable a analizar.
== Retorna ==
Devuelve verdadero si es ASCII, falso si no lo es.
== Advertencias ==
Nada.
== Ejemplos ==
<pre>
isAlpha('a'); //verdadero
isAlpha('M'); //verdadero
isAlpha('3'); //verdadero
isAlpha(' '); //verdadero
isAlpha('%'); //verdadero
</pre>
== Ejemplo 2 ==
Envía un carácter desde el monitor serie y veras si es de este tipo o no.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte caracter = Serial.Read();
if (isAscii(caracter)){
Serial.print("SI");
}else{
Serial.print("NO");
}
Serial.println(" es ASCII");
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones caracteres</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones caracteres]]
fzfx2muqz6n4i1h1nhhpq8j54nvdlb9
isControl()
0
74
4303
4214
2019-06-11T23:40:31Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Analiza si dato o variable es un carácter de control.
== Sintaxis ==
<pre>
isControl(dato);
isControl(variable);
</pre>
== Parametro ==
;dato: dato a analizar.
;variable: nombre de variable a analizar.
== Retorno ==
Devuelve true si la dato o variable es un caracter de control o false si no lo es.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte c = Serial.read();
if (isControl(c)){
Serial.print("Es");
}else{
Serial.print("No es");
}
Serial.println(" un caracter de control.");
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones caracteres</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones caracteres]]
709glfayxjxextj2br5fm90imhzqc5t
isDigit()
0
75
4302
4217
2019-06-11T23:40:05Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Analiza si parámetro es un dígito (0~9).
== Sintaxis ==
<pre>
isDigit(dato);
isDigit(variable);
</pre>
== Parámetro ==
;dato: dato a analizar.
;variable: nombre de variable a analizar.
== Retorno ==
Devuelve true si parámetro es un dígito (0~9) o false si no lo es.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
char c = Serial.read();
if (isDigit(c)){
Serial.println("Es un carácter digito.");
}
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones caracteres</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones caracteres]]
ibvl9peoq578hmavy9ep60j2rytx9sd
isGraph()
0
76
4304
4220
2019-06-11T23:40:53Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Analiza si dato o variable es un carácter gráfico imprimible (visible al imprimir; el espacio, tabulador y salto de línea no cuentan aquí).
== Sintaxis ==
<pre>
isGraph(dato);
isGraph(variable);
</pre>
== Parámetro ==
;dato: dato a analizar.
;variable: nombre de variable a analizar.
== Retorno ==
Devuelve true si la dato o variable es un carácter gráfico imprimible o false si no lo es.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte c = Serial.read();
if (isGraph(c)){
Serial.print("Es");
}else{
Serial.print("No es");
}
Serial.println(" un caracter grafico.");
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones caracteres</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones caracteres]]
62b7uxao77w6znnkhfy5f9b8r94w00c
isHexadecimalDigit()
0
77
4301
4222
2019-06-11T23:39:53Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Analiza si dato o variable es un dígito hexadecimal válido. Es decir 0~9 y A~F
== Sintaxis ==
<pre>
isHexadecimalDigit(dato);
isHexadecimalDigit(variable);
</pre>
== Parámetro ==
;dato: dato a analizar.
;variable: nombre de variable a analizar.
== Retorno ==
Devuelve true si la dato o variable es un dígito hexadecimal o false si no lo es.
== Advertencias ==
Nada.
== Ejemplo ==
Envia un caracter desde el monitor serie y veras si es de este tipo o no.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte caracter = Serial.Read();
if (isHexadecimalDigit(caracter)){
Serial.print("SI");
}else{
Serial.print("NO");
}
Serial.println(" es HexadecimalDigit");
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones caracteres</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones caracteres]]
m9wkl48xz59dx4mqfs2zvfo3sem4jmz
isLowerCase()
0
80
4305
4224
2019-06-11T23:42:00Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Analiza si el parámetro es un carácter en minúsculas.
== Sintaxis ==
<pre>
isLowerCase(dato);
isLowerCase(variable);
</pre>
== Parámetro ==
;dato: dato a analizar.
;variable: nombre de variable a analizar.
== Retorno ==
Devuelve true si la dato o variable es un carácter minuscula o false si no lo es.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte c = Serial.read();
if (isLowerCase(c)){
Serial.print("Es");
}else{
Serial.print("No es");
}
Serial.println(" un carácter minuscula.");
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones caracteres</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones caracteres]]
jkn83ux5dthf6w110jwnd0zgo68u909
isPrintable()
0
79
4300
4215
2019-06-11T23:39:39Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Analiza si dato o variable es un carácter imprimible. A diferencia de [[isGraph()]], caracteres como el espacio, tabulador y salto de línea sí cuentan.
== Sintaxis ==
<pre>
isPrintable(dato);
isPrintable(variable);
</pre>
== Parámetro ==
;dato: dato a analizar.
;variable: nombre de variable a analizar.
== Retorno ==
Devuelve true si la dato o variable es un carácter imprimible o false si no lo es.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte c = Serial.read();
if (isPrintable(c)){
Serial.print("Es");
}else{
Serial.print("No es");
}
Serial.println(" un carácter imprimible.");
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones caracteres</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones caracteres]]
7mozaiduv6ozlss9lgqmntqn7y9turr
isPunct()
0
78
4306
4216
2019-06-11T23:42:18Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Analiza si dato o variable es un carácter de puntuación. Es decir , . ;
== Sintaxis ==
<pre>
isPunct(dato);
isPunct(variable);
</pre>
== Parámetro ==
;dato: dato a analizar.
;variable: nombre de variable a analizar.
== Retorno ==
Devuelve true si la dato o variable es un carácter de puntuación o false si no lo es.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
char c = Serial.read();
if (isPunct(c)){
Serial.print("Es");
}else{
Serial.print("No es");
}
Serial.println(" un carácter de puntuacion.");
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones caracteres</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones caracteres]]
05r5gzn2mdnf550gftua67uj0ngfwyy
isSpace()
0
82
4299
4223
2019-06-11T23:39:26Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Analiza si parámetro es un carácter espaciador. Los demás caracteres mencionados en [[isWhiteSpace()]] no cuentan aquí.
== Sintaxis ==
<pre>
isSpace(dato);
isSpace(variable);
</pre>
== Parametro ==
;dato: dato a analizar.
;variable: nombre de variable a analizar.
== Retorno ==
Devuelve true si la parámetro espaciador o false si no lo es.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte c = Serial.read();
if (isSpace(c)){
Serial.print("Es");
}else{
Serial.print("No es");
}
Serial.println(" un espacio en blanco.");
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones caracteres</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones caracteres]]
ekxmzhzvopx8mfg5xeplj80c5b9xk68
isUpperCase()
0
81
4298
4212
2019-06-11T23:39:12Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Analiza si parámetro es mayúscula.
== Sintaxis ==
<pre>
isUpperCase(dato);
isUpperCase(variable);
</pre>
== Parametro ==
;dato: dato a analizar.
;variable: nombre de variable a analizar.
== Retorno ==
Devuelve true si la parámetro es mayúsculas o false si no lo es.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte c = Serial.read();
if (isUpperCosel(c)){
Serial.print("Es");
}else{
Serial.print("No es");
}
Serial.println(" un carácter en mayuscula.");
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones caracteres</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones caracteres]]
pf04hyqsj52sz9lwc2ez2w16s8zdhbz
isWhiteSpace()
0
83
4297
4225
2019-06-11T23:38:57Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Analiza si parámetro es un espacio en blanco (' '), salto de página ('\f'), salto de línea ('\n'), retorno del carro ('\r'), tabulador horizontal ('\t') o tabulador vertical ('\v').
== Sintaxis ==
<pre>
isWhiteSpace(dato);
isWhiteSpace(variable);
</pre>
== Parámetro ==
;dato: dato a analizar.
;variable: nombre de variable a analizar.
== Retorno ==
Devuelve true si parámetro es un espacio en blanco o false si no lo es.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
byte c = Serial.read();
if (isWhiteSpace(c)){
Serial.print("Es");
}else{
Serial.print("No es");
}
Serial.println(" un carácter blanco.");
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones caracteres</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones caracteres]]
o1cf5dz9dfcazttxa03xx42vrqemlx8
itoa()
0
409
5081
5080
2019-10-14T16:49:32Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Convierte un valor [[int]] en una cadena terminada en nulo usando la base especificada y almacena el resultado en la matriz dada por el parámetro str.
== Sintaxis ==
<pre>
itoa(valor, matriz, base);
</pre>
== Parámetros ==
;valor:Valor [[int]] a convertir en una cadena caracteres (matriz).
;matriz:Nombre de la matriz en memoria donde almacenar la cadena resultante terminada en nulo.
;base:Base numérica usada para representar el valor como una cadena. Entre 2 y 36, donde 10 significa base decimal, 16 hexadecimal, 8 octal y 2 binarios.
== Retorna ==
Un puntero a la cadena terminada en nulo resultante, igual que el parámetro '''matriz'''.
== Comentario ==
* Si la base es 10 y el valor es negativo, la cadena resultante está precedida por un signo menos (-). Con cualquier otra base, el valor siempre se considera sin signo.
== Advertencia ==
* Debe asignarse suficiente espacio a la matriz para contener la cadena devuelta. Puede devolver hasta 17 bytes.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
int n = 12345;
char texto[5];
itoa(n, texto, 10);
for (byte i=0; i<5; i++){
Serial.println(texto[i]);
}
}
void loop(){
//Nada.
}
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
int n = 12345;
char texto[16];
itoa(n, texto, 2);
for (byte i=0; i<16; i++){
Serial.println(texto[i]);
}
}
void loop(){
//Nada.
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones conversion</categorytree>
== Referencia ==
* [http://vitaly_filatov.tripod.com/ng/tc/tc_000.168.html itoa()] - Tripod
[[Category:Funciones conversion]]
f1u46mefks18smh1048n9hfgy6k9dbx
log()
0
172
4288
4204
2019-06-11T23:34:05Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Logaritmo natural en base '''e'''.
== Sintaxis ==
<pre>
log(variable);
</pre>
== Parámetros ==
;variable: Variable a evaluar.
== Retorno ==
Logaritmo natural del numero. Es un numero tipo [[float]].
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
float a;
void setup(){
Serial.begin(9600);
for (byte i=1; i<10; i++) {
a = log(i) ;
Serial.print(i);
Serial.print("\t");
Serial.println(a);
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones matematicas</categorytree>
== Referencias ==
* [https://www.prometec.net/funciones1/ Funciones] - Prometec
* [https://www.prometec.net/funciones1/ Aprendiendo Arduino] - Enrique Crespo
[[Category:Funciones matematicas]]
o9yzx77s883ohieaj6ru86wct88p6ta
long
0
62
3676
3675
2019-05-06T18:39:32Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Es el formato numérico de 4 bytes (32 bits), son enteros comprendidos en el rango de -2147483648 a 2147483647 (2^31-1).
{{Nota|Si se hace operaciones matemáticas con enteros, al menos uno de los números debe estar seguido de una '''L''', forzando a este número a ser un '''long'''.}}
== Sintaxis ==
<pre>
long variable [= valor];
variable = valorL;
</pre>
== Parámetros ==
;variable: Una variable cualquiera
;valor: entre -2,147,483,648 y 2,147,483,647. Parámetro opcional.
;valorL: forzar tipo con subfijo '''L'''. Puedes omitir '''long''' antes del nombre de la variable.
{| class="wikitable col2cen"
|+Posibles formateadores
!Base!!Subfijo!!Ejemplo
|-
|[[unsigned int]]||U||n = 123U
|-
|[[long]]||L||n = 123L
|-
|[[unsigned long]]||UL||n = 123UL
|-
|[[float]]||F||n =12.3F
|}
{| class="wikitable col2cen"
|+Posibles formateadores
!Base!!Prefijo!!Comentario!!Ejemplo
|-
|DEC||ninguno||Dígitos 0~9||123
|-
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
|-
|OCT||0||digitos 0~7||0173
|-
|BIN||B||0 o 1||B1110011
|}
== Advertencias ==
* Si sumas 1 al valor máximo que de 2,147,483,647 pasa a -2,147,483,648.
* Si restas 1 al valor mínimo que de -2,147,483,648 pasa a 2,147,483,647.
== Ejemplo ==
<syntaxhighlight lang="c++">
long n = 12345;
x = 123U; //Con U forzamos unsigned int
y = 123L; //Con L forzamos long
z = 123UL; //Con UL forzamos unsigned long
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tipo dato</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/long/ Guia de referencia de Arduino]
* [https://www.arduino.cc/reference/es/language/variables/constants/integerconstants/ Guia de referencia de Arduino]
[[Category:Tipo dato]]
q990i8nm3zz7vym69nbnilpljqhwtbm
long()
0
177
4312
4231
2019-06-11T23:47:22Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Convierte un valor en un dato tipo [[long]].
== Sintaxis ==
<pre>
long(variable);
</pre>
== Parámetros ==
;variable: variable de cualquier tipo a evaluar.
== Retorna ==
Retorna un numero tipo [[long]].
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
char a = 'A';
byte b = 123;
void setup(){
Serial.begin(9600);
byte valor1 = byte(a);
Serial.println(valor1);
int valor2 = long(b);
Serial.println(valor2);
unsigned int valor3 = word(b);
Serial.println(valor3);
long valor4 = long(b);
Serial.println(valor4);
}
void loop(){
//Nada.
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones conversion</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones conversion]]
bl6u8rdvz22ys3px0rflgybzezvikgt
loop()
0
24
2164
2163
2018-07-24T22:39:22Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Después de la función [[setup()]], que inicializa y establece los valores iniciales, la funcion '''loop()''' hace exactamente lo que sugiere su nombre, ciclos consecutivos, permitiendo que su programa cambie y responda. Úselo para controlar activamente la placa Arduino.
== Sintaxis ==
<pre>
void loop(){
//Este código se repite una y otra vez.
}
</pre>
== Advertencia ==
{{Nota|Es obligatorio que esta sentencia sea incluida en cada boceto, aunque puede estar vacía.}}
== Ejemplo ==
<syntaxhighlight lang="c++">
const byte pulsador = 3;
void setup(){
Serial.begin(115200);
pinMode(pulsador, INPUT_PULLUP);
}
void loop(){
if (digitalRead(pulsador)){
Serial.println('H');
}else{
Serial.println('L');
}
delay(1000);
}
</syntaxhighlight>
== Vea tambien ==
* [[setup()]]
* [[void]]
[[Category:Estructura]]
73cxqj09kn0nbtks9j9b1b15qf66yt0
lowByte()
0
196
4700
4380
2019-07-14T17:41:38Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Extrae el byte de orden inferior (más a la derecha) de una variable (por ejemplo, una palabra).
== Sintaxis ==
<pre>
lowByte(variable);
</pre>
== Parámetros ==
;variable: variable a evaluar que ser tipo [[int]], [[long]], [[float]], [[unsigned int]] o [[unsigned long]].
== Retornos ==
Retorna byte.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones bit y byte</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones bit y byte]]
da2kqgogdo0u1t4bgsfy4mi6rskr68s
ltoa()
0
498
5078
5077
2019-10-13T14:35:26Z
Kike GL
2
/* Advertencia */
wikitext
text/x-wiki
== Descripción ==
Convierte un valor [[long]] en una cadena terminada en nulo usando la base especificada y almacena el resultado en la variable de nombre dada por el parámetro matriz.
== Sintaxis ==
<pre>
ltoa(valor, matriz, base);
</pre>
== Parámetros ==
;valor:Valor [[long]] a convertir en una cadena caracteres (matriz).
;matriz:Nombre de la matriz en memoria donde almacenar la cadena resultante terminada en nulo.
;base:Base numérica usada para representar el valor como una cadena. Entre 2 y 36, donde 10 significa base decimal, 16 hexadecimal, 8 octal y 2 binarios.
== Retorna ==
Un puntero a la cadena terminada en nulo resultante, de nombre igual que el parámetro '''matriz'''. No hay retorno de error.
== Comentario ==
* Si la '''base''' es 10 y el valor es negativo, la cadena resultante está precedida por un signo menos (-). Con cualquier otra base, el valor siempre se considera sin signo.
== Advertencia ==
* Debe asignarse suficiente espacio a la matriz para contener la cadena devuelta. Puede devolver hasta 33 bytes.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
long n = 64000;
char texto[33];
ltoa(n, texto, 10);
for (byte i=0; i<33; i++){
Serial.println(texto[i]);
}
}
void loop(){
//Nada.
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones conversion</categorytree>
== Referencia ==
* [http://vitaly_filatov.tripod.com/ng/tc/tc_000.181.html ltoa()] - Tripod
[[Category:Funciones conversion]]
0nzkvm3qqw72qtsqkfy399dr8sm6psn
malloc()
0
368
4844
4843
2019-07-25T00:52:27Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Asignar bloque de memoria.
Asigna un bloque de bytes de tamaño de memoria y devuelve un puntero al principio del bloque.
El contenido del bloque de memoria recién asignado no se inicializa, permaneciendo con valores indeterminados.
Si el tamaño es cero, el valor de retorno depende de la implementación de la biblioteca en particular (puede o no ser un puntero nulo), pero el puntero devuelto no debe el[[iminarse.
Este programa genera una cadena de la longitud especificada por el usuario y la rellena con caracteres alfabéticos. La longitud posible de esta cadena solo está limitada por la cantidad de memoria disponible paramalloc
== Sintaxis ==
<pre>
malloc();
</pre>
== Parámetros ==
;tamaño: Tamaño del bloque de memoria, en bytes.
;size_t: es un tipo entero sin signo. [[unsigned int]]
== Retorno ==
* En caso de éxito, un puntero al bloque de memoria asignado por la función.
El tipo de este puntero es siempre void*, que se puede convertir al tipo de puntero de datos deseado para que no se pueda distinguir.
* Si la función no pudo asignar el bloque de memoria solicitado, se devuelve un puntero nulo.
== Comentarios ==
* Solo se modifica el almacenamiento al que hace referencia el puntero devuelto. No se accede a ninguna otra ubicación de almacenamiento mediante la llamada.
* Si la función reutiliza la misma unidad de almacenamiento liberada por una función de desasignación (comogratis o [[realloc()]]), las funciones se sincronizan de tal manera que la desasignación ocurre completamente antes de la siguiente asignación.
== Advertencias ==
Nada.
== Ejemplo ==
<pre>
byte funcion(){
int i,n;
char * buffer;
printf ("How long do you want the string ?");
scanf ("%d", &i);
buffer = (char*) malloc(i+1);
if (buffer==NULL){
exit (1);
}
for (byte n=0; n<i; n++){
buffer[n]=rand()%26+'a';
}
buffer[i]='\0';
printf ("Random string: %s\n", buffer);
free (buffer);
}
</pre>
== Vea también ==
* [[free()]]
* [[calloc()]]
* [[realloc()]]
== Referencias ==
[[Category:Funciones]]
lgi9cpj8j15miazqb4mq8abkgdjwlbl
map()
0
166
4208
2320
2019-06-11T21:22:02Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Reasigna un número de un rango a otro. Es decir, un rango se correlacionaría con otro, pero no restringe dentro del rango.
{{Nota|Esta función usa matemática entera, por lo que no produce fracciones.}}
== Sintaxis ==
<pre>
map(variable,min1,max1,min2,max2);
</pre>
== Parámetros ==
;variable: variable a evaluar.
;min1: valor minimo de entrada.
;max1: valor maximo de entrada.
;min2: valor minimo de salida.
;max2: valor maximo de salida.
== Retorna ==
Un valor en el rango de '''min2''' y '''max2'''.
== Advertencias ==
Nada.
== Ejemplo ==
<pre>
int x;
map(x, 0, 1023, 0, 255); //Muy usado para adaptar salida analogico a PWM.
map(x, 1, 50, 50, 1);
map(x, 1, 50, 50, -100);
</pre>
== Vea también ==
* [[abs()]]
* [[constrain()]]
* [[max()]]
* [[min()]]
* [[pow()]]
* [[sq()]]
* [[sqrt()]]
* [[log()]]
* [[ceil()]]
* [[floor()]]
== Referencias externas ==
* [https://www.arduino.cc/reference/en/language/functions/math/map/ Guia de referencia]
[[Category:Funciones matematicas]]
73f65028u1k0g5cw4kw0x6z3p77xywx
matriz
0
485
5238
5237
2020-02-02T18:54:46Z
Kike GL
2
/* Ejemplo 3 */
wikitext
text/x-wiki
== Descripcion ==
Una matriz (array en ingles) es una variable que puede contener multiples elementos del mismo tipo.
== Sintaxis ==
<pre>
tipo nombre[] = {elemento1, elemento2...};
tipo nombre[][n] = {{1,2,3},{4,5,6},{7,8,9}};
</pre>
== Parámetros ==
;tipo:puede ser [[char]], [[byte]], [[int]], [[unsigned int]], [[long]], [[unsigned long]] o [[float]].
;nombre:es el nombre que se asignara a la matriz
;n:Es el numero de elementos
== Comentarios ==
* En un matriz se puede obviar el numero de elementos (filas), pero en una matriz bidireccional es obligatorio indicar el numero de columnas.
== Advertancia ==
Nada.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
char matriz1[] = "Arduino";
byte matriz2[] = {21,250,2,64};
int matriz3[] = {2019,7,14,8,0,0};
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
const int matriz[][6] = {
{2019,7,14,8,0,0},
{2019,7,19,8,0,0},
{2019,7,22,8,0,0}
};
void setup(){
Serial.begin(9600);
for (byte i=0; i<3; i++){
for (byte j=0; j<6; j++){
Serial.print(matriz[i][j]);
}
Serial.println();
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 3 ==
No se puede crear una '''matriz''' de matrices. Pero si se puede usar [[asterisco|punteros]] a matrices, asi:
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
byte cero[] = { 0xA6, 0xD4, 0xAC, 0xF8 };
byte uno[] = { 0xE9, 0x48, 0xCC, 0xE3 };
byte dos[] = { 0x46, 0x6F, 0xA5, 0xF8 };
byte tres[] = { 0xC2, 0x9D, 0xFC, 0x33 };
byte* matriz[4] = {cero, uno, dos, tres}; //Usando puntero
for (byte i=0; i<4; i++){
for (byte j=0; j<4; j++){
Serial.print(matriz[i][j], HEX);
Serial.print(", ");
}
Serial.println();
}
}
void loop() {
//Nada
}
</syntaxhighlight>
== Vea también ==
* [[variable publica]]
* [[variable local]]
* [[static]]
* [[volatile]]
* [[const]]
* [[define|#define]]
* [[Palabras reservadas]]
* [[Comentarios]] - (//)
* [[sizeof()]]
== Referencias externas ==
* [https://aprendiendoarduino.wordpress.com/tag/arrays/ Arrays y String] - Aprendiendo Arduino
* [https://www.luisllamas.es/arduino-array-dinamico/ Array dinamico] - Luis Llamas
* [http://codigoelectronica.com/blog/arduino-array Array en Arduino] - Codigo electronica
* [https://forum.arduino.cc/index.php?topic=208323.0 Matrices] - Foro Arduino
[[Category:Variables]]
894qso6f0r9486wacz5jjz1hm13hr5k
max()
0
167
5161
4293
2020-01-31T23:49:12Z
Kike GL
2
/* Advertencias */
wikitext
text/x-wiki
== Descripción ==
Calcula el máximo de dos números para cualquier tipo de datos devolviendo el número mayor de los dos.
== Sintaxis ==
<pre>
max(num1,num);
</pre>
== Parámetros ==
;num1: numero a comparar. Puede ser de cualquier tipo: [[char]], [[byte]], [[int]], [[float]].
;num2: numero a comparar.
== Retorno ==
Devuelve el numero mas grande.
== Advertencias ==
* Debido a la forma en que se implementa la función '''max()''', evite usar otras funciones dentro de los corchetes, puede dar lugar a resultados incorrectos.
<pre>
max(n++, 100); //Evitalo, dara resultados incorrectos
</pre>
== Ejemplo 1 ==
<pre>
max(3,6); //6
</pre>
== Ejemplo 2 ==
Este codigo asegura que el valor de '''numero''' sera por lo menos 20.
<pre>
numero = max(numero, 20);
</pre>
== Vea también ==
<categorytree mode=all>Funciones matematicas</categorytree>
== Referencias externas ==
[[Category:Funciones matematicas]]
tf6et2ueid7uu8k84ghbjz650k2w9ay
mayor
0
101
4994
4712
2019-09-26T23:38:38Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
== Sintaxis ==
<pre>
variable > valor;
variable > expresion;
variable1 > variable2;
</pre>
== Retorno ==
Verdadero si es mayor que y falso si no.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
if (x > 9){
//Es mayor
}else{
//Es menor o igual
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador logico</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Operador comparador]]
nejp5hkln38lszkc3qfyinfuzyref6u
mayor igual
0
102
5000
4999
2019-09-26T23:41:04Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Crea una condición comparando dos expresiones. Si la expresión a la izquierda en '''mayor o igual''' a la de la derecha se devuelve verdadero.
== Sintaxis ==
<pre>
variable >= valor;
variable >= expresion;
variable1 >= variable2;
</pre>
== Retorno ==
Verdadero si es mayor o igual y falso si no.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
if (x >= 9){
//Es mayo o igual
}else{
//Es menor
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador comparador</categorytree>
<categorytree mode=all>Operador logico</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Operador comparador]]
rlj2cxdcoti07gmjaz0yf4dwckkqt4r
memoria
0
307
4545
4544
2019-06-27T00:14:49Z
Kike GL
2
wikitext
text/x-wiki
Hay tres grupos de memoria en el uC usado en las placas Arduino basadas en AVR:
* [[flash]] (espacio de programa), es donde se almacena el [[boceto]] Arduino.
* [[SRAM]] (memoria de acceso aleatorio estática) es donde el boceto crea y manipula variables cuando se ejecuta.
* [[EEPROM]] es un espacio de memoria que los programadores pueden usar para almacenar información a largo plazo.
La memoria [[flash]] y la memoria [[EEPROM]] no son volátiles (la información persiste después de que se desconecta la alimentación). [[SRAM]] es volátil y se perderá cuando se apaga la corriente.
{| class="wikitable col3cen col4cen col5cen"
|+Memoria disponible
!Placa!!uC!![[flash]]!![[SRAM]]!![[EEPROM]]
|-
|[[UNO]]||ATmega328||32KB||2KB||1KB
|-
|[[NANO]]||ATmega328P||32KB||2KB||1KB
|-
|[[MEGA]]||ATmega2560||256KB||8KB||4KB
|}
== Comentarios ==
Si se queda sin [[SRAM]], su programa puede fallar de maneras inesperadas; parecerá que se carga con éxito, pero no se ejecuta o se ejecuta de forma extraña. Para comprobar si esto está sucediendo, puede intentar comentar o acortar cadenas u otras estructuras de datos en su [[boceto]] (sin cambiar el código). Si luego se ejecuta con éxito, probablemente se está quedando sin [[SRAM]].
Hay algunas cosas que puede hacer para resolver este problema:
* Si su [[boceto]] habla con un programa que se ejecuta en una computadora, puede intentar transferir datos o cálculos a la computadora, reduciendo la carga en el Arduino.
* Si tiene tablas de búsqueda u otras matrices grandes, use el tipo de datos más pequeño necesario para almacenar los valores que necesita; por ejemplo, un [[int]] ocupa 2 bytes (16 bits), mientras que un [[char]] o [[byte]] usa solo un byte (8 bits), pero almacenar un rango más pequeño de valores.
* Si no necesita modificar las cadenas o datos mientras se ejecuta su boceto, puede almacenarlos en memoria [[flash]] (programa) en lugar de [[SRAM]]; para hacer esto, use la palabra clave [[PROGMEM]].
== Advertencias ==
* Las notas en esta página son para todas las tablas excepto [[DUE]], que tiene una arquitectura diferente.
== Ejemplo ==
<syntaxhighlight lang="c++">
for (byte i=0; i<10; i++){
free(matriz[i]);
}
free(matriz);
</syntaxhighlight>
== Vea también ==
* [[flash]]
* [[SRAM]]
* [[EEPROM]]
* [[IDE]]
* [[boceto]]
* [[Estructura]]
* [[Variables]]
* [[Funciones]]
== Referencias ==
* [https://www.arduino.cc/en/Tutorial/Memory Guia de referencia Arduino]
[[Category:memoria]]
ff0jbs73ong0h0cft96oys5oqevbhez
menor
0
103
4996
4711
2019-09-26T23:39:18Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
== Sintaxis ==
<pre>
variable < valor;
variable < expresion;
variable1 < variable2;
</pre>
== Retorna ==
* Verdadero so es menos y falso si no.
== Advertencias ==
== Ejemplo ==
<syntaxhighlight lang="c++">
if (x < 9){
//Es menor
}else{
//Es mayor o igual
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador logico</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Operador comparador]]
g1ap6arnur6rh30nykvwg3rqp16lhn5
menor igual
0
104
4995
4710
2019-09-26T23:39:03Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
== Sintaxis ==
<pre>
variable <= valor;
variable <= expresion;
variable1 <= variable2;
</pre>
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
if (x <= 9){
//Es menor o igual
}else{
//Es mayor
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador logico</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Operador comparador]]
qwsa1lhe3jq4c0ot396b9g2e123yfbo
micros()
0
32
4922
4279
2019-09-21T14:03:29Z
Kike GL
2
/* Descripción */
wikitext
text/x-wiki
== Descripción ==
Devuelve el número de microsegundos desde la que placa Arduino empezó a ejecutar el [[boceto]] actual. Este número se desbordará (volverá a cero), después de aproximadamente 70 minutos. 1 segundo = 1000 000 microsegundos.
== Sintaxis ==
<pre>
micros();
</pre>
== Parámetros ==
Ninguno.
== Retornos ==
Número de microsegundos desde que se inició el boceto. Tipo de dato [[unsigned long]].
== Comentarios ==
{{Tip|Este comando tarda 47 ciclos de CPU.}}
== Advertencias ==
* En placas Arduino de 16 MHz (UNO, Duemilanove y NANO), esta función tiene una resolución de '''cuatro microsegundos''', es decir el valor devuelto es siempre un múltiplo de cuatro.
* En las placas Arduino 8 MHz (LilyPad), esta función tiene una resolución de '''ocho microsegundos''', es decir el valor devuelto es siempre un múltiplo de ocho.
* '''micros()''' funciona mediante una interrupción (la misma de [[millis()]]); por lo tanto, su valor dejará de incrementar (pero puede variar sólo un poco) durante una rutina de servicio de interrupción (ej.: posterior a [[attachInterrupt()]]), o mientras no se llame a [[interrupts()]] después de llamar a [[noInterrupts()]].
== Ejemplo ==
<pre>
unsigned long tiempo;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Tiempo: ");
tiempo = micros();
// Imprime los microsegundos transcurridos desde que se inició el programa
Serial.println(tiempo);
// Esperar un segundo para así no inundar el puerto con muchos datos
delay(1000);
}
</pre>
== Vea también ==
<categorytree mode=all>Funciones tiempo</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/micros/ Guia de referencia de Arduino]
[[Category:Funciones tiempo]]
b59obbfqkddvfp96utfai5d9p0nemsp
millis()
0
30
4836
4835
2019-07-25T00:38:13Z
Kike GL
2
/* Ejemplo 2 */
wikitext
text/x-wiki
== Descripción ==
Devuelve el número de milisegundos desde que la placa Arduino empezó a ejecutar el programa actual. Este número se desbordará (volverá a cero), después de aproximadamente 50 días.
== Sintaxis ==
<pre>
millis();
</pre>
== Parámetros ==
Nada.
== Retornos ==
Número de milisegundos desde que el programa se inició. Numero tipo [[unsigned long]].
== Comentario 1 ==
Ya que una variable [[unsigned long]] almacena numero entre 0 y 4,294,967,295 (2^32-1), esta función se vuelve a 0 a los 49.71 días pero eso no representa ningún problema para los cálculos porque al no aceptar numero negativos la variable se da la vuelta por decirlo de alguna manera.
Para que te quede claro simplificaremos con un ejemplo: supongamos que nuestra variable solo soporte 0 a 99 osea 100 '''números'''. Ahora te pregunto cuanto es 0 - 1 ? en nuestro ejemplo la respuesta correcta es 99 porque es el numero que esta antes de 0. Exactamente por el otro extremo el numero que sigue de 99 es 0. A esto se le llama lógica boleana.
Ahora supongamos que quieres prende un foco por 10 '''números''' e inicias el proceso en 22, por lo que preguntas if ('''números''' - tiempo = 10), se apagaría cuando '''números''' llegue a 32 (32 - 22 = 10). Ahora supón que se prende en 95, cuando apagara ? la respuesta es cuando '''números''' llegue a 5 (5 - 95 = 10).
{{Tip|Este comando tarda 21 ciclos de CPU.}}
== Comentario 2 ==
Se puede resetear el temporisador de millis() ?
<syntaxhighlight lang="c++">
extern volatile unsigned long timer0_millis;
unsigned long nuevo_valor = 0;
void setup(){
//Algo
}
void loop(){
//Algo
//--------
//Change Millis
setMillis(nuevo_valor);
}
void setMillis(unsigned long nuevo_valor){
uint8_t oldSREG = SREG;
cli();
timer0_millis = nuevo_valor;
SREG = oldSREG;
}
</syntaxhighlight>
== Advertencias ==
* Tenga en cuenta el tipo de valor que retorno '''millis()''' es [[unsigned long]] y pueden producirse errores lógicos si hacer operaciones aritméticas con otros tipos de datos más pequeños como: [[byte]] o [[int]], incluso los [[long]] con signo pueden producir errores de calculo.
* '''millis()''' funciona mediante una interrupción (la misma de [[micros()]]); por lo tanto, su valor dejará de incrementar durante una rutina de servicio de interrupción (ej.: posterior a [[attachInterrupt()]]), o mientras no se llame a [[interrupts()]] después de llamar a [[noInterrupts()]].
== Ejemplo 1 ==
Parpadeo del LED incorporado sin usar [[delay()]]
<syntaxhighlight lang="c++">
unsigned long t; //Es muy importante respetar el tipo de dato
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
if (milis() - t >= 500){
t = millis(); //Guarda la hora de cada cambio.
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); //Invierte valor del pin.
}
}
</syntaxhighlight>
== Ejemplo 2 ==
Parpadeo cada segundo sin usar [[delay()]].
<syntaxhighlight lang="c++">
unsigned long t; //Es muy importante respetar el tipo de dato
const int d = 2000; //Duración en milisegundos del ciclo completo
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
t = millis();
if (t%d > d/2){
digitalWrite(13, HIGH); //Prende LED
}else{
digitalWrite(13, LOW); //Apaga LED
}
}
</syntaxhighlight>
== Ejemplo 3 ==
En este ejemplo simularemos las direcionales de un auto, para lo que tenemos 2 pulsadores y 2 LED. Cada vez que pulso un botón el LED correspondiente parpadea cada 250 ms durante 3 segundos.
<syntaxhighlight lang="c++">
unsigned long izq,der,ti,td;
bool LEDi,LEDd,actual_i,actual_d,anterior_i,anterior_d;
void setup(){
pinMode(2, INPUT); //Pulsador derecho
pinMode(3, INPUT); //Pulsador izquierdo
pinMode(8, OUTPUT); //LED izquierdo
pinMode(9, OUTPUT); //LED derecho
}
void loop(){
//Prende
actual_i = digitalRead(3);
if (actual_i && !anterior_i){
LEDi = true;
izq = millis();
}
anterior_i = actual_i;
actual_d = digitalRead(2);
if (actual_d && !anterior_d){
LEDd = true;
der = millis();
}
anterior_d = actual_d;
//Parpadea
if (LEDi && (millis()-ti > 250)){
digitalWrite(8, !digitalRead(8));
ti = millis();
}
if (LEDd && (millis()-td > 250)){
digitalWrite(9, !digitalRead(9));
td = millis();
}
//Apaga
if (millis() - izq > 3000){
LEDi = false;
digitalWrite(8, LOW);
}
if (millis() - der > 3000){
LEDd = false;
digitalWrite(9, LOW);
}
}
</syntaxhighlight>
{{Nota|Hay 3 zonas en el código la primera llamada prende, aunque en realidad solo cambia el estado de una variable de tipo flag (LEDi o LEDd) e inicia el tiempo total de 3 seg (ti o td). Una 2da zona donde se hace parpadear los LED mientras la variable flag este en verdadero (LEDi o LEDd). Por ultimo esta la zona de apagado que es cuando se cumplan los 3 segundos.}}
== Vea también ==
<categorytree mode=all>Funciones tiempo</categorytree>
== Referencias externa ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [https://tomblanch.wordpress.com/2013/07/27/resetting_millis/ Resetting the Arduino millis() count] - Tom Blanchard
* [https://www.gammon.com.au/millis millis() desbordamiento, es malo ?] - Nick Gammon
* [https://www.gammon.com.au/blink Como hacer varias cosas a la vez] - Nick Gammon
* [http://www.gammon.com.au/statemachine Maquina de estados] - Nick Gammon
[[Category:Funciones tiempo]]
meeovfx0rxwwrxehey22olob4uux70a
min()
0
168
5162
5160
2020-01-31T23:49:41Z
Kike GL
2
/* Advertencias */
wikitext
text/x-wiki
== Descripción ==
Calcula el mínimo de dos números para cualquier tipo de datos devolviendo el número más pequeño.
== Sintaxis ==
<pre>
min(num1,num2);
</pre>
== Parámetros ==
;num1: numero a comparar.
;num2: numero a comparar.
== Retorna ==
Retrna el numero mas pequeños.
== Advertencias ==
Debido a la forma en que se implementa la función '''min()''', evite usar otras funciones dentro de los corchetes, puede dar lugar a resultados incorrectos.
<pre>
min(n++, 100); //Evitalo, dara resultados incorrectos
</pre>
== Ejemplo ==
<pre>
min(3,6); //3
</pre>
== Vea también ==
<categorytree mode=all>Funciones matematicas</categorytree>
== Referencias externas ==
[[Category:Funciones matematicas]]
75rt6k51kk3jrdtmasr8ex7lzw6mfhz
modulo
0
95
5037
4723
2019-09-27T00:22:06Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
La operación '''modulo''' calcula el resto cuando un entero se divide por otro. Es útil para mantener una variable dentro de un rango particular (por ejemplo, el tamaño de una matriz). El símbolo % (por ciento) se usa para llevar a cabo la operación de módulo.
{{Nota|si el segundo operando o divisor es cero, el resultado será igual al valor del primer operando o dividendo.}}
{{Nota|si el segundo operando o divisor es uno, el resultado siempre será cero.}}{{Nota|el signo del resultado dependerá solamente de el del primer operando o dividendo.}}
== Sintaxis ==
<pre>
op1 % op2
</pre>
== Parametros ==
;op1: primer operando, es el dividendo.
;op2: segundo operando, es el divisor.
== Retorna ==
Retorna el resto.
== Comentarios ==
== Advertencias ==
* Esta operación es válida únicamente entre valores enteros; con que al menos uno de los dos operandos sea punto flotante, habrá un error de compilación.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
x = 5 % 5; //0
x = 8 % 2; //0
x = 7 % 5; //2
x = 9 % 5; //4
x = 4 % 5; //4
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
for (byte n=1; n<100; n++){
Serial.print(n);
if (n%2 == 0){
Serial.println(" es par");
}else{
Serial.println(" es impar");
}
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador aritmetico</categorytree>
<categorytree mode=all>Operador aritmetico compuesto</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/structure/arithmetic-operators/remainder/ Guia de referencia de Arduino]
* [https://aprendiendoarduino.wordpress.com/2018/04/08/operadores-5/ Aprendiendo Arduino]
[[Category:Operador aritmetico]]
jzvxip4azsklp02omtz8s8cfijahh4y
modulo compuesto
0
217
5012
5008
2019-09-26T23:58:13Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Divide la variable entre un valor y guarda el resto en la misma variable.
{{Tip|Es lo mismo que variable <nowiki>=</nowiki> variable % valor}}
== Sintaxis ==
<pre>
variable %= valor;
variable = variable % valor;
</pre>
== Parámetros ==
;variable: Nombre de la variable a operar. Puede ser de cualquier tipo: [[byte]], [[int]], [[long]], [[float]].
;valor: Valor del mismo tipo que variable.
== Retorno ==
Nada.
== Comentarios ==
Nada.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
byte n = 24;
n %= 5; //4
n %= 3; //1
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador aritmetico</categorytree>
<categorytree mode=all>Operador aritmetico compuesto</categorytree>
== Referencias ==
[[Category:Operador aritmetico compuesto]]
80dr57t7sketyf6pqho8i0g0nd37i0x
multiplicacion compuesta
0
215
5009
4730
2019-09-26T23:56:29Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Multiplica la variable entre un valor y guarda el resultado en la misma variable
{{Nota|Es lo mismo que variable <nowiki>=</nowiki> variable * valor}}
== Sintaxis ==
<pre>
variable *= valor;
variable = variable * valor;
</pre>
== Parametros ==
;variable: Nombre de la variable a operar.
;valor: valor a incluir.
== Retorno ==
Nada.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
byte n = 2;
n *= 2; //4
n *= 2; //8
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador aritmetico</categorytree>
<categorytree mode=all>Operador logico</categorytree>
== Referencias ==
[[Category:Operador aritmetico compuesto]]
rjf5tfcrhe2o7km8pqqdvrmdou59fz2
multiplicación
0
93
5036
5035
2019-09-27T00:21:41Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
La multiplicación es una de las cuatro operaciones aritméticas primarias. El operador *(asterisco) opera en dos operandos para producir el producto.
== Sintaxis ==
<pre>
variable = valor * variable * expresion;
</pre>
== Parámetros ==
;variable:Nombre de la variable
;valor:Valor a asignar a la variable
;expresion:
== Advertencias ==
* Al hacer operaciones aritméticas preste atención a los tipo de dato involucrados.
* Debido a que toda variable tiene un límite, una multiplicación que resulte en un valor extremedamente alto puede tener un resultado sin sentido (por desbordamiento). Por ejemplo: que una multiplicación de dos enteros positivos resulte en un valor negativo (si la variable es con signo), o que sea menor que el primer operando (si la variable es sin signo).
* Por lógica, si la variable donde se almacenará el resultado no tiene signo, este jamás será negativo aunque uno de los operandos sea negativo.
== Ejemplo ==
<pre>
int x = 10;
int y = 5;
x = 2*x; /20
x *= y //100 (Multiplica x por y)
</pre>
== Vea también ==
<categorytree mode=all>Operador aritmetico</categorytree>
<categorytree mode=all>Operador aritmetico compuesto</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/structure/arithmetic-operators/multiplication/ Guia de referencia de Arduino]
* [https://aprendiendoarduino.wordpress.com/2018/04/08/operadores-5/ Aprendiendo Arduino]
[[Category:Operador aritmetico]]
9u6j84c8p2jhnky1bxm6ih6fw7jw64l
naiveToInt()
0
401
2905
2019-04-03T22:08:49Z
Kike GL
2
Página creada con «== Descripción == == Sintaxis == == Parámetros == == Advertencias == == Ejemplo == <syntaxhighlight lang="c++"> </syntaxhighlight> == Vea también == * [[string]] *...»
wikitext
text/x-wiki
== Descripción ==
== Sintaxis ==
== Parámetros ==
== Advertencias ==
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
* [[string]]
* [[strlen()]]
== Referencias ==
* [https://www.luisllamas.es/convertir-texto-a-numero-arduino/ Convertir texto a numero] - Luis Llamas
* [http://panamahitek.com/tipos-de-datos-arrays-en-arduino/ Tipos de datos: Arrays] - José Villalaz
[[Category:Variables]]
i8w2na0kxoaur0t6ze467m12tzvd3gh
noInterrupts()
0
43
4263
2041
2019-06-11T23:11:11Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Deshabilita las interrupciones (que después se pueden rehabilitar con [[interrupts()]]. Las interrupciones permiten que ciertas tareas importantes que suceden en segundo plano sean activadas por defecto. Algunas funciones no trabajarán mientras las interrupciones están deshabilitadas, y las comunicaciones entrantes pueden ser ignoradas. Las interrupciones pueden alterar ligeramente la sincronización de código, sin embargo, y pueden ser desactivadas de los sectores especialmente críticos del código.
== Sintaxis ==
<pre>
noInterrupts();
</pre>
== Parámetros ==
Nada.
== Retornos ==
Nada.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup() {
//Nada
}
void loop(){
noInterrupts();
//Aquí el código sensible al tiempo
interrupts();
//Aquí el resto de código
}
</syntaxhighlight>
== Vea también ==
* [[interrupts()]]
* [[attachInterrupt()]]
* [[detachInterrupt()]]
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [http://www.gammon.com.au/interrupts Nick Gammon]
[[Category:Funciones interrupciones]]
0a4vj9qoor79wghcm6soe0f0k08drlq
noTone()
0
56
4283
4239
2019-06-11T23:30:00Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Detiene la generación de una onda cuadrada disparada por [[tone()]]. No tiene efecto si no se está generando un tono.
{{Nota|Si desea reproducir tonos diferentes en varios pines, es necesario llamar noTone() en un pin antes de llamar a [[tone()]] en el siguiente pin.}}
== Sintaxis ==
<pre>
noTone(pin);
</pre>
== Parámetros ==
;pin: el pin en el que se está generando el tono.
== Retornos ==
Nada.
== Advertencias ==
Nada.
== Ejemplo ==
<pre>
</pre>
== Vea también ==
<categorytree mode=all>Funciones tiempo</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/noTone/ Guia de referencia de Arduino]
[[Category:Funciones tiempo]]
61t7uynodketv8zk52aurpdhd2sa7ag
not
0
96
5297
5291
2020-06-06T21:40:29Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Niega una expresión (invierte su valor de verdad) se representa con carácter de admiración (!).
{| class="wikitable col2cen"
!a!!<nowiki>!</nowiki>a
|-
|0||1
|-
|1||0
|}
{{Nota| Recuerde que [[true / false|false]], 0 y [[HIGH / LOW|LOW]] son sinonimos, si como [[true / false|true]], cualquier numero distinto a o y [[HIGH / LOW|HIGH]] también lo son.}}
== Sintaxis ==
<pre>
!variable;
not variable;
!expresion;
</pre>
== Parámetros ==
;variable: variable del tipo boleana. Ejemplo q=false;
;expresion: expresion cuya evaluacion debe ser verdero o falso. Ejemplo x>5;
== Retorno ==
Retorna la variable negada.
== Advertencias ==
* No confundir el operador boleano not ('''<nowiki>!</nowiki>'''), con el operador [[not bit a bit]] ('''~''').
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
bool a = false;
bool a = 0;
bool a = LOW;
!a //verdadedo en todos los casos
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
byte a=5;
a>2; //Verdadero
!a>2; //Falso
</syntaxhighlight>
== Ejemplo 3 ==
Un parpadeo simple del LED a bordo.
<syntaxhighlight lang="c++">
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
delay(500);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador logico</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [https://programarfacil.com/blog/programacion/la-logica-en-la-programacion/ La lógica en la programacion] - Luis Del Valle
* [http://manueldelgadocrespo.blogspot.com/p/blog-page_8.htm Documentacion en español] - Manuel Delgado
* [https://aprendiendoarduino.wordpress.com/category/operadores/ Operadores] - Aprendiendo Arduino
[[Category:Operador logico]]
dmv2i7sq7gtjuj2e7v52jfc8u5vne7l
not bit a bit
0
206
4993
4992
2019-09-26T23:36:18Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
El operador '''not bit a bit''' es representado por el caracter tilde '''~'''. Opera sobre el numero a su derecha cambiando cada bit a su valor opuesto, es decir: cada 0 se convierte en 1 y 1 se convierte en 0.
{| class="wikitable col2cen"
!a!!~a
|-
|0||1
|-
|1||0
|}
== Sintaxis ==
<pre>
~variable;
</pre>
== Parametros ==
;variable: una variable tipo numerica.
== Retorno ==
El valor de dicha variable, pero con todos sus bits invertidos.
== Advertencias ==
* No confundir el operador bit a bit not con el boleano [[not]] <nowiki>!</nowiki>
== Ejemplo ==
<pre>
byte a = B11110000;
byte b = ~a; //B00001111
int a = 103; //B0000000001100111 = 103
int b = ~ a; //B1111111110011000 = -104
x = ~ x; // alternar todos los bits en x y almacenar de nuevo en x
</pre>
== Vea también ==
Operatores logicos
* [[not]] <nowiki>(!)</nowiki>
* [[and]] <nowiki>(&&)</nowiki>
* [[or]] <nowiki>(||)</nowiki>
* [[xor]] <nowiki>(^)</nowiki>
Operadores bit a bit
* [[and bit a bit]] <nowiki>(&)</nowiki>
* [[or bit a bit]] <nowiki>(|)</nowiki>
* [[xor bit a bit]] <nowiki>(^)</nowiki>
<categorytree mode=all>Operador bit a bit</categorytree>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [https://playground.arduino.cc/Code/BitMath/#bitwise_not Bitwise NOT] - Playgorund
[[Category:Operador bit a bit]]
pjjwdo5vwt4my1wlpvp75pv1k8v22on
now()
0
398
5149
5148
2020-01-23T17:00:35Z
Kike GL
2
/* Parámetros */
wikitext
text/x-wiki
== Descripción ==
Lee la fecha y hora actual desde le reloj.
== Sintaxis ==
<pre>
//#include <Wire.h> //Solo si usas reloj físico
#include <RTClib.h>
RTC_Millis rtc; //Reloj por software
//RTC_DS1307 rtc; //Reloj con DS1307
//RTC_DS3231 rtc; //Reloj con DS3231
//RTC_PCF8523 rtc; //Reloj con PCF8523
DateTime hoy = rtc.now();
</pre>
== Parámetros ==
;hoy:Nombre de la variable de tipo [[DateTime]]
== Retorno ==
Fecha y hora actual en formato UnixTimeStamp del tipo [[DateTime]]
== Comentarios ==
Nada
== Advertencia ==
Cuidado porque existe la función '''now()''' en ambas librerias [[Time|TimeLib.h]] y [[RTC|RTClib.h]].
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
//#include <Wire.h>
#include <RTClib.h>
RTC_Millis rtc; //Reloj por software
//RTC_DS1307 rtc; //Reloj con DS1307
//RTC_DS3231 rtc; //Reloj con DS3231
DateTime hoy,anterior = 0;
void setup () {
Serial.begin(57600);
//Para setear RTC con fecha y hora cuando se compila
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//Para setear RTC a 21-MAR-2019 8:00:00
rtc.adjust(DateTime(2019, 3, 21, 8, 0, 0));
}
void loop(){
hoy = rtc.now();
if (hoy.second() != anterior.second()){
anterior = hoy;
Serial.print(hoy.year());
Serial.print('-');
Serial.print(hoy.month());
Serial.print('-');
Serial.print(hoy.day());
Serial.print(' ');
Serial.print(hoy.hour());
Serial.print(':');
Serial.print(hoy.minute());
Serial.print(':');
Serial.println(hoy.second());
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria RTC</categorytree>
== Referencias ==
* [https://github.com/adafruit/RTClib RTClib] - Adafruit
[[Category:Libreria RTC]]
8gh8bb3pz7680dp4a7bn6hvne79uiax
objeto.c str()
0
342
3630
3629
2019-05-06T18:19:47Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Convierte el contenido de una cadena como una cadena terminada en nulo al estilo C ([[string]]). Tenga en cuenta que esto le da acceso directo a la memoria intermedia interna [[String]] y se debe usar con cuidado.
== Sintaxis ==
<pre>
objeto.c_str()
</pre>
== Parámetros ==
;objeto: nombre de la instanciado de clase [[String]].
== Retorna ==
Un puntero al estilo C de la cadena invocadora ([[const]] [[char]]*).
== Advertencias ==
* Cuando modifica el objeto [[String]], o cuando se destruye, cualquier puntero devuelto previamente por '''c_str()''' deja de ser válido y no debe seguir usandose.
* En particular, nunca debe modificar la cadena a través del puntero devuelto; de lo contrario, podrían ocurrir discrepancias con los contadores internos, y por ende, comportamiento indefinido al operar con el objeto.
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/c_str/ Guia de referencia de Arduino]
[[Category:String]]
3ma8md8cwyqgh8sdylsri6t1k0ew5gq
objeto.charAt()
0
340
3636
3635
2019-05-06T18:21:45Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Accede a un caracter particular de la cadena.
== Sintaxis ==
<pre>
variable.charAt(n);
</pre>
== Parámetros ==
;variable: objeto instanciado de la clase [[String]]
;n: índice del caracter ([[unsigned int]]); el primer caracter está en la posición 0 (relativo al cero).
== Retorna ==
El n-ésimo caracter de la cadena ([[char]]).
== Advertencias ==
Nada.
== Ejemplos ==
<syntaxhighlight lang="c++">
String cadena = "Apuntes de Arduino";
cadena.chatAt(0); //A
cadena.chatAt(6); //s
cadena.chatAt(11); //A
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:String]]
s07cqrn7i136frmqqbq7iq9cz5b5h8r
objeto.compareTo()
0
348
3612
3611
2019-05-06T18:11:39Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Compara dos cadenas, probando si una viene antes o después de la otra en orden de la tabla ASCII o si son iguales. Las cadenas se comparan carácter por carácter, usando los valores ASCII de los caracteres.
{{Nota|esta es la función que se ejecuta implícitamente cuando se utiliza el operador [[menor]], [[mayor]], [[menor igual]] o [[mayor igual]] en este tipo de dato.}}
== Sintaxis ==
<pre>
objeto.compareTo(cadena);
</pre>
== Parámetros ==
;objeto: nombre del objeto instancia de clase [[String]].
;cadena: variable tipo [[String]]
== Retorna ==
;cero: Si las cadenas son iguales.
;positivo: Si el objeto viene antes de la cadena.
;negativo: Si el objeto viene despues de la cadena.
== Comentarios ==
Por ejemplo: 'a' (97) viene antes de 'b' (98) pero después de 'A' (65). Los números vienen antes de las letras. El 0 esta en posicion 48.
== Advertencias ==
La comparación es sensible a las mayúsculas; para sobrellevar este problema, ambas cadenas tendrían que pasar por [[objeto.toLowerCase()]] o [[objeto.toUpperCase()]] de antemano.
== Ejemplo ==
Tenemos que la primera letra de ambas cadenas coinciden y las segundas letras son p (70) y r (72), asi que la respuesta es la diferencia.
<syntaxhighlight lang="c++">
String frase1 = "Apuntes";
String frase2 = "Arduino";
frase1.compareTo(frase2); //-2 (70-72)
frase2.compareTo(frase1); //2 (72-70)
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/compareto/ Guia de referencia de Arduino]
[[Category:String]]
5jgl6h06oi273hw7ixb3p2t4yrxslor
objeto.concat()
0
338
3620
3619
2019-05-06T18:16:18Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Contatena (adjunta) el parametro dado.
{{Nota|esta es la función que se ejecuta implícitamente cuando se utiliza el operador '''+''' en este tipo de dato.}}
== Sintaxis ==
<pre>
objeto.concat(param);
</pre>
== Parámetros ==
;objeto: instancia de la clase [[String]].
;param: parametro a concatenar al final de la cadena ([[String]], [[string]], [[char]], [[byte]], [[int]], [[unsigned int]], [[long]], [[unsigned long]], [[float]], [[double]], [[F()|__FlashStringHelper]]).
== Retorna ==
[[bool]]: '''verdadero''' si se pudo concatenar; '''falso''' en caso contrario (usualmente es seña de que la memoria [[SRAM]] está por llenarse o la cadena actual es demasiado grande).
== Advertencias ==
Nada.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
String frase = "Apuntes";
frase.concat(" de "); //Apuntes de
frase.concat("Arduino."); //Apuntes de Arduino.
</syntaxhighlight>
== Ejemplo 2 ==
Mira como podemos concatenar un valor numerico a una variable [[String]]
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
String sensor = "Sensor: ";
sensor.concat(analogRead(A0));
Serial.println(sensor);
}
void loop(){
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:String]]
h5ha4c4l37d2w7tq6aewfdixgl9kqgg
objeto.endsWith()
0
356
3608
3607
2019-05-06T18:10:17Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Comprueba si un objeto termina con los caracteres de otra cadena.
== Sintaxis ==
<pre>
objeto.endsWith(cadena);
</pre>
== Parámetros ==
;objeto: nombre de la instancia de la clase [[String]]
;cadena: cadena tipo [[String]]
== Retorna ==
Nada.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
Serial.println("Ejemplos con: startsWith() y endsWith():");
}
void loop ( ) {
String cadena = "HTTP / 1.1 200 OK";
Serial.println(cadena);
//Comprueba si comienza con una cadena particular
if (cadena.startsWith("HTTP / 1.1")) {
Serial.println("El servidor usa http versión 1.1");
}
//Buscar en una posición de desplazamiento en la cadena
if (cadena.startsWith("200 OK",9)){
Serie.println("Obtuve un OK del servidor");
}
//Comprueba si un objeto termina con un caracter en particular
String sensor = "sensor = ";
sensor += analogRead(A0);
Serial.print(sensor);
if (sensor.endsWith("0")) {
Serial.println(". Esta lectura es divisible por diez.");
}else{
Serial.println(". Esta lectura no es divisible por diez.");
}
//No hacer nada mientras sea verdadero:
while (true) ;
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/endswith/ Guia de referencia de Arduino]
[[Category:String]]
q8yw98lnbg970s7rc5bxdv1fre3lgvx
objeto.equals()
0
354
3610
3609
2019-05-06T18:11:05Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Compara dos cadenas para la igualdad. La comparación distingue entre mayúsculas y minúsculas, lo que significa que la cadena "hola" no es igual a la cadena "Hola".
{{Nota|esta es la función que se ejecuta implícitamente cuando se utiliza el operador [[igualdad]] o [[diferente]] en este tipo de dato.}}
== Sintaxis ==
<pre>
objeto.equals(cadena);
</pre>
== Parámetros ==
;objeto: nombre del objeto instanciado de la clase [[String]].
;cadena: cadena a comparar ([[String]]).
== Retorna ==
[[bool]]: '''true''' si cadena es igual a cadena, '''false''' de lo contrario.
== Advertencias ==
Para una verificación que no distinga mayúsculas, utiliza [[objeto.equalsIgnoreCase()]] en su lugar.
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/equals/ Guia de referencia de Arduino]
[[Category:String]]
k2km1k5wvz5uk2zeheu3h1f9qqvqq9q
objeto.equalsIgnoreCase()
0
355
3628
3627
2019-05-06T18:19:09Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Compara dos cadenas para la igualdad. La comparación '''no''' distingue entre mayúsculas y minúsculas, lo que significa que la cadena "hola" es igual a la cadena "Hola".
== Sintaxis ==
<pre>
objeto.equalsIgnoreCase()
</pre>
== Parámetros ==
;objeto: nombre del objeto instanciado de la clase [[String]].
;cadena: cadena a comparar ([[String]]).
== Retorna ==
[[bool]]: '''true''' si cadena es igual a cadena, '''false''' de lo contrario.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:String]]
9mx9f2aftdec4d3hsmmv7i34mm4i1to
objeto.getBytes()
0
180
3588
3579
2019-05-06T18:02:17Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Copia los caracteres de la cadena al bufer provisto.
== Sintaxis ==
<pre>
objeto.getBytes(bufer, largo);
</pre>
== Parámetros ==
;objeto: nombre del objeto instanciado de la clase [[String]].
;bufer: el búfer para copiar los caracteres en tipo [[byte]].
;largo: el tamaño del búfer, tipo [[unsigned int]]
== Retorna ==
El [[byte]] elegido.
== Comentarios ==
Nada.
== Advertencias ==
* Recuerde que "0" corresponde al codigo ASCII 48 y "9" al codigo 57. Ver [[tabla ASCII]].
* La longitud del buffer debe respetarse, de lo contrario se corre el riesgo de un "desbordamiento de buffer" que puede corromper el contenido la memoria de ejecución ([[SRAM]]).
== Ejemplo ==
Este ejemplo se ejecuta una sola vez.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
String cadena = "0123456789";
byte matriz[cadena.length()];
cadena.getBytes(matriz, cadena.length()); //Convierte a byte
for (byte i=0; i<cadena.length(); i++){
Serial.println(matriz[i]);
delay(100);
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/getbytes/ Guia de referencia de Arduino]
[[Category:String]]
jsdbpscd2nuh9ed909lfqlh241ntl0u
objeto.indexOf()
0
341
3591
3590
2019-05-06T18:03:12Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Retorna la primera posición del caracter o cadena dados.
== Sintaxis ==
<pre>
objeto.indexOf(c[, desde]);
</pre>
== Parámetros ==
;objeto: Instancia de la clase [[String]].
;c: Carácter o cadena a buscar dentro del objeto ([[char]], [[string]] o [[String]]).
;desde: Permite buscar una coincidencia desde cierta posición.
== Retorna ==
La posicion hallada, o -1 si no lo encuentra ([[int]]).
== Advertencias ==
Nada.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
String frase = "Apuntes de Arduino";
frase.indexOf('A'); //0
frase.indexOf('A',2); //11
frase.indexOf('m'); //-1
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo ponemos en el monitor serie algo como 123,456,789 y obtendremos 456.00 el numero entre las , en [[float]]
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(9600);
}
void loop() {
String num = "";
while (Serial.available()){
char c = Serial.read();
num = num + c;
delay(10);
}
if (num != ""){
byte pos1 = num.indexOf(",") +1;
byte pos2 = num.indexOf(",",pos1);
float n = num.substring(pos1,pos2).toFloat();
Serial.println(n);
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:String]]
7n71dr7rkov26t8t52pxj0bqatuzjqc
objeto.lastIndexOf()
0
357
3624
3623
2019-05-06T18:17:43Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Retorna la última posición del caracter o cadena dados.
== Sintaxis ==
<pre>
variable.lastIndexOf(valor);
variable.lastIndexOf(valor, desde);
</pre>
== Parámetros ==
;variable: objeto instanciado de la clase [[String]]
;valor: Carácter o cadena a buscar dentro del objeto ([[char]], [[string]] o [[String]]).
;desde: Permite buscar una coincidencia desde cierta posición, aunque el recorrido se realiza para atrás.
== Retorna ==
La posicion hallada, o -1 si no lo encuentra ([[int]]).
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:String]]
85cls6j63n90uoomqi03p2egivezzy2
objeto.length()
0
346
3614
3613
2019-05-06T18:14:22Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Retorna la longitud (en cantidad de caracteres) actual de esta cadena.
== Sintaxis ==
<pre>
objeto.length();
</pre>
== Parámetros ==
;objeto: instancia de la clase [[String]].
== Retorna ==
La longitud de la cadena ([[int]]).
== Advertencias ==
Nada.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
String cadena = "Apuntes de Arduino";
cadena.length(); //18
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo debes enviar una frase por la consola por ejemplo "Hola mundo".
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()) {
String texto = Serial.readString();
Serial.println(texto.length());
}
}</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [http://arduino.cc/en/Reference/StringLength Guia de referencia Arduino]
[[Category:String]]
ag9r947e21n8trlqh4hsl2pdnjqh7sw
objeto.remove()
0
349
3618
3617
2019-05-06T18:15:39Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Remueve (elimina) una porción de la cadena.
== Sintaxis ==
<pre>
objeto.remove(indice);
objeto.remove(indice, conteo);
</pre>
== Parámetros ==
;objeto: nombre de la instancia de la clase [[String]].
;indice: la posición inicial a tomar en cuenta ([[int]]).
;conteo: la cantidad de caracteres a eliminar desde la posición inicial ([[int]]).
== Retorna ==
Nada.
== Advertencias ==
Si remueves desde '''0''' [[objeto.length()]] caracteres, efectivamente estarías vaciando (borrando) la cadena completa. Sin embargo, sería más eficiente asignarle "" en vez de hacerlo de manera antes descrita.
== Ejemplo ==
<syntaxhighlight lang="c++">
String saludo = "hello";
saludo.remove(2, 2); //heo
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/remove/ Guia de referencia de Arduino]
[[Category:String]]
becyydnc3rgsx0z25xdrmrsgl7y5k8m
objeto.replace()
0
345
3616
3615
2019-05-06T18:15:07Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Este método le permite reemplazar todas las instancias de una cadena dada por otra cadena. Puede tratarse de cadenas (con comillas doble) o caracteres simples (con comillas simple).
== Sintaxis ==
<pre>
objeto.replace(cadena1,cadena2);
</pre>
== Parámetros ==
;objeto: nombre de la instancia del objeto [String]
;cadena1: una variable de tipo [[String]] o valor en comillas dobles si son varios caracteres.
;cadena1: otra variable de tipo [[String]] o valor en comillas dobles si son varios caracteres.
== Retorna ==
Nada.
== Advertencias ==
* Los caracteres debe ser encerrados con comillas simples.
* El conjunto de caracteres de una cadena deben ser encerrados en comillas dobles.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(9600);
Serial.println("Reemplazar una cadena:");
}
void loop() {
String cadena = "Pata Peta Pita Pota";
Serial.println("Cadena original: " + cadena);
//Cambia todas las instancias de una subcadena con otra
cadena.replace("ta","rir");
Serial.println("Cadena modificada: " + cadena);
cadena = "Tata Teta Tita Tota Tuta";
Serial.println("Cadena original: " + cadena);
//También puedes usar replace() en caracteres individuales:
cadena.replace('T','P');
Serial.println("Cadena modificada: " + cadena);
//No hacer nada mientras sea verdadero
while (true);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/replace/ Guia de referencia de Arduino]
[[Category:String]]
tcc3i83q9dleijozl371tsduufa1h7t
objeto.reserve()
0
362
3793
3792
2019-05-06T23:01:35Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Crea (o modifica) la reservación de espacio (en [[SRAM]]) para contener los caracteres de este objeto.
En caso de ser para una variable global o [[static]], es buena práctica pre-asignar el espacio que se considere requerido; para así disminuir las posibilidades de fragmentar la memoria y mejorar el rendimiento al operar con este objeto.
== Sintaxis ==
<pre>
objeto.reserve(s);
</pre>
== Parámetros ==
;objeto: nombre de la instancia de la clase [[String]].
;s: espacio en número de caracteres a asignar ([[unsigned int]]).
== Retorno ==
Nada.
== Advertencias ==
No se debe confundir el tamaño del "contenedor" con la cantidad de caracteres que componen la cadena. Por lo tanto, '''reserve()''' no debería alterar inmediatamente el valor de [[objeto.length()]] a menos que el tamaño a reservar sea menor.
== Ejemplos ==
<syntaxhighlight lang="c++">
String cadena;
void setup() {
Serial.begin(9600);
cadena.reserve(26);
cadena = "i=";
cadena += "123";
cadena += ", esto es ok ?";
Serial.println(cadena);
}
void loop() {
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/reserve/ Guia de referencia Arduino]
[[Category:String]]
1ck2sm4qsv8g7yzgtpf2v7p8mdhfb5q
objeto.setCharAt()
0
339
3626
3625
2019-05-06T18:18:21Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Establece un carácter de la cadena. No tiene efecto en los índices fuera de la longitud existente de la cadena.
== Sintaxis ==
<pre>
objeto.setCharAt(indice,c);
</pre>
== Parámetros ==
;objeto: nombre de la instancia de la clase [[String]]
;indice: el índice dónde cambiar el caracter ([[int]])
;c: el caracter a colocar en la ubicación dada ([[char]]).
== Retorna ==
Nada.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/setcharat/ Guia de referencia de Arduino]
[[Category:String]]
fh3zn35pjnlahn8tku650ljkdmfb0ba
objeto.startsWith()
0
353
3632
3631
2019-05-06T18:20:26Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Comprueba si un objeto comienza con los caracteres de otra cadena.
== Sintaxis ==
<pre>
objeto.startsWith(cadena);
</pre>
== Parámetros ==
;objeto: nombre de la instancia de la clase [[String]]
;cadena: variable tipo [[String]]
== Retorna ==
;true: Si el objeto empieza con la cadena.
;false: Lo contrario.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
Serial.println("Ejemplos con: startsWith() y endsWith():");
}
void loop ( ) {
String cadena = "HTTP / 1.1 200 OK";
Serial.println(cadena);
//Comprueba si comienza con una cadena particular
if (cadena.startsWith("HTTP / 1.1")) {
Serial.println("El servidor usa http versión 1.1");
}
//Buscar en una posición de desplazamiento en la cadena
if (cadena.startsWith("200 OK",9)){
Serie.println("Obtuve un OK del servidor");
}
//Comprueba si un objeto termina con un caracter en particular
String sensor = "sensor = ";
sensor += analogRead(A0);
Serial.print(sensor);
if (sensor.endsWith("0")) {
Serial.println(". Esta lectura es divisible por diez.");
}else{
Serial.println(". Esta lectura no es divisible por diez.");
}
//No hacer nada mientras sea verdadero:
while (true) ;
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/startswith/ Guia de referencia de Arduino]
[[Category:String]]
604wu7v189pdbcqj0ejrheklfk8nz6s
objeto.substring()
0
337
3597
3596
2019-05-06T18:05:03Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Extrae una cadena de caracteres entre dos posiciones.
== Sintaxis ==
<pre>
objeto.substring(desde);
objeto.substring(desde, hasta);
</pre>
== Parámetros ==
;objeto: instancia de la clase [[String]].
;desde: Posición '''desde''' donde inicia la extracción de la subcadena ([[int]]).
;hasta: Posición '''hasta''' donde concluye la extracción de la subcadena ([[int]]). Si no se especifica, se irá hasta el final.
== Retorna ==
Subcadena entre las posiciones desde y hasta ([[String]]).
== Advertencias ==
Nada.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
String frase = "Apundes de Arduino";
frase.substring(10); //Arduino
frase.substring(10,14); //Ardu
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo ponemos en e monitor serie algo como: 123,456,789 y obtendremos 456.00 el numero entre las , en [[float]]
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(9600);
}
void loop() {
String num = "";
while (Serial.available()){
char c = Serial.read();
num = num + c;
delay(10);
}
if (num != ""){
byte pos1 = num.indexOf(",") +1;
byte pos2 = num.indexOf(",",pos1);
float n = num.substring(pos1,pos2).toFloat();
Serial.println(n);
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:String]]
cf89yvgay90led8pgz0fopogcwo8k64
objeto.toCharArray()
0
350
3593
3592
2019-05-06T18:03:51Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Copia los caracteres del objeto al buffer provisto.
== Sintaxis ==
<pre>
objeto.toCharArray(matriz, largo);
</pre>
== Parámetros ==
;objeto: Nombre del objeto instanciado de la clase [[String]].
;matriz: Variable matriz tipo [[char]] donde se copiaran los caracteres.
;largo: Tamaño del búfer tipo [[unsigned int]]. Lo puedes sacar de [[objeto.length()]]
== Retorna ==
Nada.
== Advertencias ==
La longitud del buffer debe respetarse, de lo contrario se corre el riesgo de un "desbordamiento de buffer" que puede corromper el contenido la memoria de ejecución ([[SRAM]]).
== Ejemplo ==
Aqui tenemos una cadena con 4 caracteres, creamos una matriz del tamaño adecuado y volcamos contenido con '''toCharArray()''' luego comprobamos con un simple for.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
String cadena = "abcd";
char matriz[cadena.length()];
cadena.toCharArray(matriz, cadena.length());
for (byte i=0; i<=cadena.length(); i++){
Serial.println(matriz[i]);
delay(100);
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/tochararray/ Guia de referencia de Arduino]
[[Category:String]]
m7up0l9kqnebyjom7vdcl19wrwun06w
objeto.toFloat()
0
351
4912
3599
2019-09-20T15:38:11Z
Kike GL
2
/* Ejemplo 2 */
wikitext
text/x-wiki
== Descripción ==
Convierte una objeto válido en un numero tipo [[float]]. La cadena de entrada debe comenzar con un dígito. Si la cadena contiene caracteres que no son dígitos, el método dejará de realizar la conversión.
== Sintaxis ==
<pre>
objeto.toFloat();
</pre>
== Parámetros ==
;objeto: nombre de la instancia de la clase [[String]]
== Retorna ==
El valor convertido ([[float]]), o '''0.0''' en caso de que la cadena no empiece con una secuencia válida.
== Comentarios ==
Por ejemplo, las cadenas "123.45", "123" y "123fish" se convierten a 123.45, 123.00 y 123.00 respectivamente. Tenga en cuenta que "123.456" se aproxima a 123.46.
== Advertencias ==
Tenga en cuenta también que los numero [[float]] tienen solo 6-7 dígitos decimales de precisión y que las cadenas más largas pueden estar truncadas.
== Ejemplo 1 ==
Convertimos una cadena de dígitos en [[float]].
<syntaxhighlight lang="c++">
String texto = "-123.45";
void setup(){
Serial.begin(115200);
float valor = texto.toFloat();
Serial.println(valor);
}
void loop(){
//Nada.
}
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo pondremos en el monitor serie algo como: 123,456,789 y veras como respuesta 456.00 osea el numero entre las , en [[float]].
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(9600);
}
void loop() {
String num = "";
while (Serial.available()){
char c = Serial.read();
num = num + c;
delay(10);
}
if (num != ""){
byte pos1 = num.indexOf(",") +1;
byte pos2 = num.indexOf(",",pos1);
float n = num.substring(pos1,pos2).toFloat();
Serial.println(n);
}
}
</syntaxhighlight>
== Ejemplo 3 ==
En este ejemplo pondremos en el monitor serie algo como: 123.456 y veras como respuesta 123.45 osea el numero en [[float]].
<syntaxhighlight lang="c++">
String frase = "";
float x;
void setup(){
Serial.begin(9600);
}
void loop(){
while (Serial.available()){
char caracter = Serial.read();
frase.concat(caracter);
delay(10);
}
if (frase != ""){
x = frase.toFloat();
Serial.println(x);
frase = "";
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/tofloat/ Guia de referencia de Arduino]
* [https://www.luisllamas.es/convertir-texto-a-numero-arduino/ Convertir texto a numero] - Luis Llamas
[[Category:String]]
0t9eoid6nmwvwcujrzcfcuyqgnu9gdx
objeto.toInt()
0
179
3595
3594
2019-05-06T18:04:27Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Convierte una cadena válida en un entero. La cadena de entrada debe comenzar con un número entero. Si la cadena contiene números no enteros, la función dejará de realizar la conversión.
== Sintaxis ==
<pre>
objeto.toInt();
</pre>
== Parámetros ==
;objeto: nombre de la instancia de la clase [[String]].
== Retorna ==
El valor convertido ([[long]]), o '''0''' en caso de que la cadena no empiece con una secuencia válida.
== Advertencias ==
Nada.
== Ejemplo 1 ==
Si envias digitos por la consola se convierten en entero.
<syntaxhighlight lang="c++">
String cadena = "";
void setup(){
Serial.begin(9600);
Serial.println("Cadena toInt():");
}
void loop() {
while (Serial.available()) {
char caracter = Serial.read();
if (isDigit(caracter)) { //Solo concatena si es dígito
cadena += caracter;
}
//si obtiene una nueva línea, imprima la cadena, luego el valor de la cadena
if (letra == '\n') {
Serial.print("Valor:") ;
Serial.println(cadena.toInt());
Serial.print("Cadena:");
Serial.println(cadena);
cadena = "" ; //Limpia cadena para proxima lectura
}
}
}
</syntaxhighlight>
== Ejemplo 2 ==
Definida una cadena se convierte a [[int]].
<syntaxhighlight lang="c++">
String texto = "-12345";
void setup(){
Serial.begin(115200);
int entero = texto.toInt();
Serial.println(entero);
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 3 ==
En este ejemplo ponemos en el monitor serie algo como: 123,456,789 y obtendremos 456 el numero entre las , es [[int]].
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(9600);
}
void loop() {
String num = "";
while (Serial.available()){
char c = Serial.read();
num = num + c;
delay(10);
}
if (num != ""){
byte pos1 = num.indexOf(",") +1;
byte pos2 = num.indexOf(",",pos1);
int n = num.substring(pos1,pos2).toInt();
Serial.println(n);
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Tutorial/StringToInt Guia de referencia de Arduino]
* [https://www.luisllamas.es/convertir-texto-a-numero-arduino/ Convertir texto a numero] - Luis Llamas
[[Category:String]]
1m4m2kmrqkvmllxzwjetsj4rmyadog2
objeto.toLowerCase()
0
343
3604
3603
2019-05-06T18:08:16Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Pasa a minusculas todos los caracteres de la cadena.
== Sintaxis ==
<pre>
objeto.toLowerCase();
</pre>
== Parámetros ==
;objeto: instancia de la clase [[String]].
== Retorna ==
Nada.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
String frase = "Apuntes de Arduino";
frase.toLowerCase(); //apuntes de arduino
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:String]]
7mn0esk8o3k8l85f6px8l5p58fl5sb2
objeto.toUpperCase()
0
344
3634
3633
2019-05-06T18:21:06Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Cambia a mayusculas todos los caracteres de la cadena.
== Sintaxis ==
<pre>
objeto.toUpperCase();
</pre>
== Parámetros ==
;objeto: instancia de la clase [[String]].
== Retorna ==
Nada.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
String frase = "Apuntos de arduino";
frase.toUpperCase(); //APUNTES DE ARDUINO
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>String</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:String]]
0dv4mz4dztz0zlas4od5cji50ztvggi
objeto.trim()
0
352
3606
3605
2019-05-06T18:09:26Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Crea una versión de la cadena con cualquier espacio en blanco inicial y final eliminado. A partir de 1.0, '''trim()''' modifica la cadena en lugar de devolver una nueva.
== Sintaxis ==
<pre>
objeto.trim();
</pre>
== Parametros ==
;objeto: Instancia de la clase [[String]]
== Retorna ==
Nada.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
String frase = " Apuntes de Arduino ";
frase.trim(); //"Apuntes de Arduino"
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Stream</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:String]]
mzhzrnxykowkyifbq528mjij041caoi
or
0
98
5295
5294
2020-06-06T21:39:43Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
Es un operador boleano '''or''' <nowiki>||</nowiki> que permite unir dos expresiones lógicas de manera disyuntiva ("o"). Sus posibles resultados son dados por la siguiente tabla de verdad:
{| class="wikitable col3cen"
!a!!b!!a <nowiki>||</nowiki> b
|-
|0||0||0
|-
|1||0||1
|-
|0||1||1
|-
|1||1||1
|}
== Sintaxis ==
<pre>
espresion 1 or expresion 2
espresion 1 || expresion 2
</pre>
== Retorna ==
Verdadero o falso.
== Advertencias ==
* No confundir el operador boleano '''or''' (<nowiki>||</nowiki>), con el operador [[or bit a bit]] (<nowiki>|</nowiki>).
== Ejemplo ==
<syntaxhighlight lang="c++">
if (x < 9 || x > 20){
//Esta fuera del rango
}else{
//Esta entre 10 y 19
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador logico</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [https://programarfacil.com/blog/programacion/la-logica-en-la-programacion/ La lógica en la programacion] - Luis Del Valle
* [https://aprendiendoarduino.wordpress.com/category/operadores/ Operadores] - Aprendiendo Arduino
[[Category:Operador logico]]
9bemk8gdb10lo73yqdt2xt62a2c71sg
or bit a bit
0
208
4986
4976
2019-09-26T23:26:29Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
El operador binario '''OR bit a bit''' es representado por el carácter barra <nowiki>|</nowiki>. OR establece (pone en 1) un bit sí y solo si el bit de esa posición está establecido (en 1) en al menos uno de los operandos.
{| class="wikitable col3cen"
!a!!b!!a <nowiki>|</nowiki> b
|-
||0||0||0
|-
||0||1||0
|-
||1||0||0
|-
||1||1||1
|}
{{Nota|Esta operación también es usada para establecer (poner en uno) uno o varios bits específicos en una variable. Todo bit en 1 en el segundo operando, se establecerá; mientras que todo bit en cero se se quedará como está.}}
== Sintaxis ==
<pre>
op1 | op2
</pre>
;op1: primer operando, es la variable (de cualquier tipo) a modificar.
;op2: segundo operando, es quien va a relizar las modificaciones pertinentes.
== Retorno ==
El valor resultante, donde cada bit se establece sólo si lo está en al menos uno de los operandos.
== Advertencias ==
* No confundir este operador '''OR bit a bit''' <nowiki>|</nowiki> con el boleano [[or]] <nowiki>||</nowiki>
* Idealmente ambos operandos deberían ser del mismo tipo (tamaño); en caso de no ser así, solo se operará con los bytes menos significativos del más grande.
== Ejemplo ==
<syntaxhighlight lang="c++">
byte var = 1;
var |= B00000110; //Ahora var vale 7 debido a que establecí esos bits
</syntaxhighlight>
== Vea también ==
* [[not]] <nowiki>(!)</nowiki>
* [[and]] <nowiki>(&&)</nowiki>
* [[or]] <nowiki>(||)</nowiki>
* [[not bit a bit]] <nowiki>(~)</nowiki>
* [[and bit a bit]] <nowiki>(&)</nowiki>
* [[xor bit a bit]] <nowiki>(^)</nowiki>
* [[bitshift right]] <nowiki>(>>)</nowiki>
* [[bitshift left]] <nowiki>(<<)</nowiki>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [https://playground.arduino.cc/Code/BitMath/#bitwise_or Bitwise OR] - Playgroubd
[[Category:Operador bit a bit]]
rnn0p8ttb399njxq7jhq9b3k2xf4eps
or bit a bit compuesto
0
218
5021
5020
2019-09-27T00:06:56Z
Kike GL
2
/* Descripción */
wikitext
text/x-wiki
== Descripción ==
El operador '''OR bit a bit compuesto''' (|=) se usa para forzar cierto bit de una variable a 1 (HIGH).
{| class="wikitable col3cen"
!a!!b!!a <nowiki>|=</nowiki> b
|-
|0||0||0
|-
|1||0||1
|-
|0||1||1
|-
|1||1||1
|}
{{Nota|A menudo se hace referencia en las guías de programación como "puesta a 1" (SET) de bits.}}
== Sintaxis ==
<pre>
variable |= mascara;
variable = variable | mascara;
</pre>
== Parámetros ==
;variable: Nombre de la variable a operar. Puede ser tipo: [[char]], [[byte]], [[int]] o [[long]]
;mascara: constante entera. Puede ser tipo: [[char]], [[byte]], [[int]] o [[long]]
== Retorno ==
* Los bits tratados con 0 no se modifican. Mantienen su estado.
* Los bits tratados con 1 se ponen a 1, sin importar su estado.
== Comentarios ==
debido a que se trata de bits de un operador de bits - es conveniente usar el formateador binario con constantes. Las cifras siguen siendo el mismo valor en otras representaciones, que simplemente no son tan fáciles de entender. Además, B00000000 se muestra por claridad, pero cero en cualquier formato de número es cero.
== Advertencias ==
Nada.
== Ejemplo 1 ==
Para configurar los bits 0 (menos significativo) y 1 de una variable, dejando el resto de la variable sin cambios, use el operador '''OR bit a bit compuesto''' (| =) con la constante B00000011.
<syntaxhighlight lang="c++">
byte a = B10101010;
a |= B00000011; //B10101011
</syntaxhighlight>
{|class="wikitable"
|Variable||Bxxxxxxxx
|-
|Mascara||B00000011
|-
|Resultado||Bxxxxxx11
|}
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(9600);
int z,n = 12345;
byte val1 = highByte(n);
byte val2 = lowByte(n);
z = val1; //Tomamos MSB
z <<= 8; //Desplazamos 8 bits a la izquierda
z |= val2; //Añadimos LSB}
Serial.println(z);
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
* [[incremento]] <nowiki>(++)</nowiki>
* [[decremento]] <nowiki>(--)</nowiki>
* [[suma compuesta]] <nowiki>(+=)</nowiki>
* [[resta compuesta]] <nowiki>(-=)</nowiki>
* [[multiplicacion compuesta]] <nowiki>(*=)</nowiki>
* [[division compuesta]] <nowiki>(/=)</nowiki>
* [[modulo compuesto]] <nowiki>(%=)</nowiki>
<categorytree mode=all>Operador bit a bit compuesto</categorytree>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias externas ==
* [https://manueldelgadocrespo.blogspot.com/p/or-bit-bit-compuesto.html Manuel Delgado Crespo]
[[Category:Operador bit a bit compuesto]]
h8mxksu830j02z2kbre6ox3z5n7ufl7
pinMode()
0
25
4644
4347
2019-07-04T16:46:27Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
Esta función debe ser usada dentro de [[setup()]] y sirve para configurar los puertos digitales que serán usadas y el modo que puede ser INPUT (entrada) o OUTPUT (salida) o INPUT_PULLUP (entrada con resistencia pull-up interna).
{{Tip|Los pines tanto analógicos como digitales de '''entrada''' no necesitan ser definidos con '''pinMode()'''.}}
== Sintaxis ==
<pre>
pinMode(pin, modo);
</pre>
== Parámetros ==
;pin: es el numero del pin digital a usar (0~13 + 14~19). Puedes usar [[const]] [[byte]] para definirla.
;modo: por lo general se usa las palabras reservadas: [[INPUT / OUTPUT / INPUT_PULLUP]].
== Retorna ==
Nada.
== Comentarios ==
* Los terminales de Arduino, por defecto, están configurados como entradas, por lo tanto no es necesario definirlos en el caso de que vayan a trabajar como entradas.
* Los pines configurados como INPUT (entrada) quedan, bajo el punto de vista eléctrico, como entradas en alta impedancia.
* Los pines configurado como OUTPUT (salida) se dice que están en un estado de baja impedancia y pueden proporcionar 40 mA de corriente a otros dispositivos y circuitos. Esta corriente es suficiente para alimentar un LED (no olvides poner una resistencia en serie de 220 ohms o mas), pero no es lo suficiente grande como para alimentar cargas de mayor consumo como relés o motores.
* Un cortocircuito en las patillas Arduino provocará una corriente elevada que puede dañar o destruir el chip ATmega.
== Advertencias ==
En muchos ejemplos se ve que usa una variable de tipo [[int]] para definir el pin a usar. Esto es un grave error por dos motivos:
# Una variable sera almacenada en memoria [[SRAM]] porque se espera que su valor cambie durante la ejecución del [[boceto]], pero normalmente en los pines esto nunca ocurre, por lo que es preferible usar [[const]] que es almacenada en [[flash]].
# El tipo [[int]] ocupa 2 byte. Es suficiente usar el tipo [[byte]] (0~255) que solo ocupa 1 byte.
== Ejemplo 1 ==
Aqui definimos los pines digitales 3, 4 y 5 como salidas.
<syntaxhighlight lang="c++">
void setup(){
for (byte n=3; n<=5; n++){
pinMode(n, OUTPUT);
}
}
void loop(){
//nada
}
</syntaxhighlight>
== Ejemplo 2 ==
Usamos un pin analogico como digital.
<syntaxhighlight lang="c++">
void setup() {
pinMode(A0, OUTPUT); //Definimos pin analógico A0 como digital. También funciona con 14.
digitalWrite(A0, HIGH);
}
void loop() {
//Nada
}
</syntaxhighlight>
== Ejemplo 3 ==
Parpadea el LED a bordo.
<syntaxhighlight lang="c++">
void setup() {
DDRB = DDRB | 32; //Configura el pin digital 13 como OUTPUT, no altera el resto. 32=B00100000;
}
void loop() {
PORTB = PORTB ^ 32; //Invertido estado del bit 5 (pin digital 13), no altera el resto.
delay(500);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones pines</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/variables/constants/constants/ Niveles lógicos en Arduino]
* [https://playground.arduino.cc/ArduinoNotebookTraduccion/DigitalIO Playground]
* [https://www.prometec.net/funciones1/ Funciones Arduino] - Prometec
* [https://programarfacil.com/podcast/26-arduino-entradas-y-salidas/ Entradas y salidas] - Luis del Valle
* [http://manueldelgadocrespo.blogspot.com/p/pinmode.html pinMode()] - Manuel Delgado
[[Category:Funciones pines]]
oj9784c3k1abbe7ws0kdvq6f1di4n4g
pow()
0
169
5299
5166
2020-06-06T21:43:37Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Calcula el valor de un número elevado a una potencia. Se puede usar para elevar un número a una potencia fraccionaria. Esto es útil para generar un mapeo exponencial de valores o curvas.
== Sintaxis ==
<pre>
pow(base,exponente);
</pre>
== Parámetros ==
;base: numero base. Tipo [[float]]
;exponente: exponente. Recuerda que 0.5 es raiz cuadrada. Tipo [[float]]
== Retorno ==
Retorna el numero base elevado al exponente. Tipo [[double]]
== Advertencias ==
Nada.
== Ejemplos ==
<syntaxhighlight lang="c++">
pow(3,3); //81
pow(9,0.5); //3
</syntaxhighlight>
== Vea también ==
* [[abs()]]
* [[constrain()]]
* [[map()]]
* [[max()]]
* [[min()]]
* [[sq()]]
* [[sqrt()]]
* [[log()]]
* [[ceil()]]
* [[floor()]]
== Referencias ==
* [https://www.arduino.cc/reference/en/language/functions/math/pow/ pow()]- Referencia Arduino
* [https://www.prometec.net/funciones1/ Funciones] - Prometec
* [https://www.prometec.net/funciones1/ Aprendiendo Arduino] - Enrique Crespo
* [http://manueldelgadocrespo.blogspot.com/p/powbase-exponent.html Arduino en español] - Manuel Delgado
[[Category:Funciones matematicas]]
2nbftib62sjsaxk3slkwrhsmbunx1ob
pulseIn()
0
182
4280
4240
2019-06-11T23:28:34Z
Kike GL
2
/* Vea tambien */
wikitext
text/x-wiki
== Descripción ==
Lee un pulso (HIGH o LOW) en un pin digital y retorna la duración del pulso en microsegundos o 0 si no se inicia ningún pulso dentro de un tiempo de espera especificado.
La función '''pulseIn()''' espera que el pin pase a HIGH, inicia el cronometraje, luego espera que el pin pase a LOW y detiene el cronometraje.
{{Nota|Funciona bien con pulsos desde 10 us a 3 min de duración.}}
== Sintexis ==
<pre>
pulseIn(pin, valor);
pulseIn(pin, valor, espera);
</pre>
== Parámetros ==
;pin: numero de pin digital a examinar.
;valor: es el tipo de pulso a identificar: HIGH o LOW.
;espera: es el numero de us que espera el pulso. El predeterminado es 1 segundo.
== Retorna ==
Retorna la longitud del pulso en microsegundos en [[unsigned long]] o 0 si el pulso no se completa dentro del tiempo de espera determinado con "espera".
== Advertencias ==
Nada.
== Ejemplo ==
Para este ejemplo conecta un pulsador entre el pin 7 y GND. Luego de pulsar y soltar, Arduino te dirá la duración del pulso en microsegundos.
<syntaxhighlight lang="c++">
unsigned long duracion = 0;
void setup(){
Serial.begin(9600);
pinMode(7, INPUT_PULLUP);
}
void loop(){
duracion = pulseIn(7, LOW);
if (duracion){
Serial.print("Tiempo (us) = ");
Serial.prinln(duracion);
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones tiempo</categorytree>
== Referencias externas ==
[[Category:Funciones tiempo]]
f06auty37uocuaeuru4scc3oswspan5
pulseln()
0
444
3865
2019-05-08T14:46:57Z
Kike GL
2
Kike GL trasladó la página [[pulseln()]] a [[pulseIn()]]
wikitext
text/x-wiki
#REDIRECCIÓN [[pulseIn()]]
ldsbknum3tjpjgyld216abxe24xum1m
random()
0
48
4153
2359
2019-06-11T19:39:14Z
Kike GL
2
/* Retornos */
wikitext
text/x-wiki
== Descripción ==
La función random devuelve un número aleatorio entero de un intervalo de valores especificado entre los valores min (inclusive) y max (hasta max-1).
{{Nota|Si quiere realmente generar un número aleatorio entre una ejecución y otra, debe cambiar el valor de la "semilla" con [[randomSeed()]].}}
== Sintaxis ==
<pre>
random(max);
random(min, max);
</pre>
== Parámetros ==
;max: numero maximo pero no lo incluye. Hasta max-1
;min: numero minimo incluido (cero cuando no se especifica este parámetro).
== Retornos ==
Retorna un número aleatorio entero tipo [[long]], cuyo valor oscilará entre '''min''' y '''max'''-1.
== Comentarios ==
{{Tip|Este comando tarda 2245 ciclos de CPU.}}
== Advertencias ==
Es un generador pseudo-aleatorio, lo que quiere decir que si la semilla (valor de iniciación) permanece constante, la secuencia de valores generados también lo será. Hay dos formas de obtener la semilla en tiempo de ejecución y con relativa aleatoriedad:
# El valor retornado por [[analogRead()]] sobre un pin analógico "flotante" (libre, sin conectar a nada), aunque la semilla estaría limitada a la resolución del ADC.
# Una técnica que involucra aprovechar el desfase natural entre el oscilador principal y el del temporizador "watchdog", pulsar [https://gist.github.com/endolith/2568571 aquí] para leer sobre el tema (en inglés y aplica únicamente para arquitecturas AVR).
== Ejemplo ==
<pre>
byte n = random(0,256); //Genera un numero entre 0~255 (max-1)
int n = random(1024); //Genera un numero entre 0~1023
</pre>
== Vea también ==
* [[randomSeed()]]
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones]]
jj3q5kf5zqvls0c7pirpwdr0msbavom
randomSeed()
0
223
2358
1507
2018-08-10T02:22:02Z
Lucario448
3
/* Advertencias */
wikitext
text/x-wiki
== Descripción ==
Establece un valor, o semilla, como punto de partida para la función [[random()]]. En realidad inicializa el generador de números pseudoaleatorios, haciendo que comience en un punto arbitrario en su secuencia aleatoria. Esta secuencia, aunque es muy larga y aleatoria, siempre es la misma.
<pre>
void setup(){
randomSeed(semilla);
}
</pre>
== Parámetros ==
;semilla: un numero tipo [[unsigned long]] que define la semilla.
== Retorno ==
Nada.
== Advertencias ==
* Si llamas esta función con un numero [[unsigned long]] fijo la secuencia [[random()]] siempre se repetira.
== Comentarios ==
* Si el pin A0 esta al aire producirá ruido que es perfecto para usar de semilla.
== Ejemplos ==
<syntaxhighlight lang="c++">
void setup(){
randomSeed(analogRead(A0));
}
void loop(){
int aleatorio = random(1024); //Numero entre 0~1023
}
</syntaxhighlight>
== Vea también ==
* [[random()]]
== Referencias ==
[[Category:Funciones]]
5gjlep9inll8ykqz4fnmgdc736faesn
realloc()
0
370
4846
2029
2019-07-25T00:53:16Z
Kike GL
2
/* Advertencias */
wikitext
text/x-wiki
== Descripción ==
== Sintaxis ==
<pre>
</pre>
== Parámetros ==
== Retorno ==
== Comentarios ==
== Advertencias ==
Nada.
== Ejemplo ==
<pre>
</pre>
== Vea también ==
* [[free()]]
* [[malloc()]]
* [[calloc()]]
== Referencias ==
[[Category:Funciones]]
r3z4h16wykab7ghxdunk8wvx7t7ce3v
resta
0
92
5031
4720
2019-09-27T00:19:21Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
La resta es una de las cuatro operaciones aritméticas primarias. El operador -(menos) opera en dos operandos para producir la diferencia entre el segundo y el primero.
== Sintaxis ==
<pre>
op1 - op2
</pre>
;op1: primer operando, también conocido como el minuendo.
;op2: segundo operando, también conocido como el sustraendo.
== Advertencias ==
* Al hacer operaciones aritméticas preste atención a los tipo de dato involucrados.
* Debido a que toda variable tiene un límite, una resta que resulte en un valor extremedamente bajo puede tener un resultado sin sentido (por desbordamiento). Por ejemplo: que una resta de un entero negativo con otro positivo resulte en un valor positivo (si la variable es con signo), o que sea mayor que el primer operando (si la variable es sin signo y el segundo operando es positivo).
== Ejemplo ==
<pre>
int x = 10;
int y = 5;
x = x - 3; //7
x--; //6 (decremente x en uno)
x -= y; //1 (decremente x en y, lo mismo que hacer x = x - y:)
</pre>
== Vea también ==
<categorytree mode=all>Operador aritmetico</categorytree>
<categorytree mode=all>Operador aritmetico compuesto</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/structure/arithmetic-operators/subtraction/ Guia de referencia de Arduino]
* [https://aprendiendoarduino.wordpress.com/2018/04/08/operadores-5/ Aprendiendo Arduino]
[[Category:Operador aritmetico]]
n1x7sl5czbk37l5p3y59yxzn3fhsun9
resta compuesta
0
214
5013
5007
2019-09-26T23:58:22Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Resta un valor de una variable y guarda el resultado en la misma variable.
{{Tip|Es lo mismo que variable <nowiki>=</nowiki> variable - valor.}}
== Sintaxis ==
<pre>
variable -= valor;
variable = variable - valor;
</pre>
== Parámetros ==
;variable: Nombre de la variable a operar. Puede ser de cualquier tipo: [[char]], [[byte]], [[int]], [[long]], [[float]].
;valor: Valor del mismo tipo que variable.
== Retorno ==
Retorna la variable decrementada en valor.
== Advertencias ==
Tenga cuidado con no provocar desborde u obtendrá resultados inesperados.
== Ejemplo 1 ==
En el caso de datos o variables numéricas se efectúa la '''resta''' y el resultado se guarda en misma variable.
<syntaxhighlight lang="c++">
byte n = 15;
n -= 3; //12
n -= 3; //9
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo nos hemos atrevido a usar el decremento sobre una variable tipo [[char]] Se muestra Z, U, P, K, F, A.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
char x = 'Z';
Serial.println(x);
for (byte n=0; n<5; n++){
x -= 5;
Serial.println(x);
}
}
void loop(){
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador aritmetico</categorytree>
<categorytree mode=all>Operador aritmetico compuesto</categorytree>
== Referencias ==
[[Category:Operador aritmetico compuesto]]
9l21ms92p22b3k1bo6vwcwt1l2bne2z
return
0
89
5256
5255
2020-02-04T12:52:08Z
Kike GL
2
/* Ejemplo 2 */
wikitext
text/x-wiki
== Descripción ==
Termina una función, devuelve el control y opcionalmente un valor desde una función a la función que la llamó.
{{Nota|Lo que escribamos por debajo de '''return''' en la función donde lo usemos, no se ejecutará nunca. Ya que, cuando llega a '''return''', vuelve a la función que lo llamó.}}
== Sintaxis ==
<pre>
return [variable];
</pre>
== Parámetros ==
;variable: variable, constante o valor que se retornara.
== Retorno ==
Valor de la variable o constante a la función invocadora (si no es de retorno la funcion debera ser definida con [[void]]).
== Advertencias ==
* Al crear la función debes indicar el tipo de valor retornado.
* Solo se usa [[void]] para las funciones que NO retornan ningun valor.
== Ejemplo 1 ==
Con esta funcion convertimos un sensor analogo en digital.
<syntaxhighlight lang="c++">
bool checkSensor(){
if (analogRead(0) > 400) {
return true;
}else{
return false;
}
}
</syntaxhighlight>
== Ejemplo 2 ==
Esta funcion retorna valores simplificados entre 0 y 10. Recuerda que n sera entre 0 y 1023.
<syntaxhighlight lang="c++">
byte sensor(){
int n = analogRead(5);
return n%100;
}
</syntaxhighlight>
== Vea también ==
* [[if... else]]
* [[Asignación condicional]]
* [[switch... case]]
* [[for]]
* [[while]]
* [[do... while]]
* [[break]]
* [[continue]]
* [[goto]]
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Estructura control]]
p939ynbuultxewyetehb85xbr7imkm6
serialAvailable()
0
296
4821
4820
2019-07-19T00:14:05Z
Kike GL
2
/* Ejemplos */
wikitext
text/x-wiki
== Descripción ==
Esta funcion se invoca cuando hay datos disponibles en el buffer del puerto serie.
== Sintaxis ==
<pre>
void serialEvent(){
//Comandos
}
</pre>
== Parámetros ==
;comandos: cualquier declaración válida
== Retorno ==
Verdadero si hay datos en el buffer.
== Comentarios ==
* Lo puedes usar en [[UNO]], [[NANO]] y [[MEGA]].
* [[MEGA]] tiene un evento para cada puerto serie.
== Advertencias ==
* Actualmente, '''serialEvent()''' no es compatible con [[ESPLORA]], [[Leonardo]] ni [[MICRO]].
== Ejemplos ==
Para Arduino [[UNO]] y [[NANO]].
<syntaxhighlight lang="c++">
void serialEvent(){
//Comandos
}
</syntaxhighlight>
== Ejemplo 2 ==
Solo para Arduino [[MEGA]].
<syntaxhighlight lang="c++">
void serialEvent1(){
//Comandos
}
void serialEvent2(){
//Comandos
}
void serialEvent3(){
//Comandos
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
* [https://aprendiendoarduino.wordpress.com/tag/comunicacion-serie/ Comunicación serie] - Enrique Crespo
[[Category:Serial]]
ebpgnxr9pwb23dxt7t0x0critljuxgm
serialEvent()
0
310
4811
4810
2019-07-19T00:06:08Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Llamado (a manera de rutina de interrupción) cada vez que se recibe un dato en el pin Rx; se ejecuta después de colocarlo en el buffer de entrada. Use [[Serial.read()]] para capturar esos datos.
== Sintaxis ==
<pre>
void serialEvent(){
//Algo
}
</pre>
== Ejemplos ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
* [https://www.arduino.cc/en/Tutorial/SerialEvent serialEvent()] - Rerencias Arduino
* [http://manueldelgadocrespo.blogspot.com/p/serialev.html serialEvent()] - Manuel Delgado
* [https://aprendiendoarduino.wordpress.com/tag/comunicacion-serie/ Comunicacion serie] - Enrique Crespo
* [https://www.prometec.net/funcionesii/ Funciones serie] - Prometec
[[Category:Serial]]
pq1lk53p326tlumniazep93jgry9u9g
setTime()
0
395
3470
3050
2019-05-06T00:04:39Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripcion ==
La función '''setTime()''' esta disponible luego de invocada la libreria '''TimeLib.h''' y nos permite decirle al Arduino en que día y hora estamos y que a partir de allí mantenga adecuadamente esa fecha hasta su próximo reseteo.
== Sintaxsis ==
<pre>
setTime(ss); //Numero de segundos desde 1-ENE-1970
setTime(h,m,s,dia,mes,año); //hora, minuto, segundo dia, mes, año.
</pre>
== Parámetros ==
;ss:Segundos transcurridos desde 1-ENE-1970
;h:Hora (0~23)
;m:Minuto (0~59)
;s:Segundo (0~59)
;dia:Dia (1~31)
;mes:Mes (1~12)
;año:Año (1970~2069)
== Comentarios ==
* Si necesitas hacer conversiones entre fecha y '''Unix Time Stamp''' usa [https://www.unixtimestamp.com/ Epoch Converter]
* El formato '''Unix Time Stamp''' es muy util para hacer operaciones entre dos fechas.
== Advertencias ==
Es indispensable incluir en el [[boceto]] '''#include <TimeLib.h>''' para que funcione o arrojara un error.
== Ejemplo 1 ==
Creamos un reloj sin hardware externo y mostramos la h:m:s.milisegundos cada segundo usando un [[delay()]]. Las funciones estan vacias.
<syntaxhighlight lang="c++">
#include <TimeLib.h>
void setup(){
Serial.begin(9600);
//setTime(1531562400); //Unix Time Stamp
setTime(10,0,0,14,7,2018); //Formato h,m,s,d,m,a
}
void loop(){
Serial.print(hour());
Serial.print(":");
Serial.print(minute());
Serial.print(":");
Serial.print(second());
Serial.print(".");
Serial.println(millis());
delay(1000);
}
</syntaxhighlight>
{{Nota|Mira la secuencia cada ves hay 1001 milisegundos mas. Es debido a que el tiempo continua corriendo.}}
== Ejemplo 2 ==
En este ejemplo incluimos la fecha hora 2018-7-14 10:0:0 y mostramos su avance cada 1350 milisegundos. Cada ciclo consultamos la hora y la guardamos en una variable por lo que ahora todas las funciones usan exactamente la misma hora.
<syntaxhighlight lang="c++">
#include <TimeLib.h>
void setup(){
Serial.begin(9600);
//setTime(1531562400); //Unix Time Stamp
setTime(10,0,0,14,7,2018); //Formato h,m,s,d,m,a
}
void loop(){
time_t t = now();
Serial.print(hour(t));
Serial.print(":");
Serial.print(minute(t));
Serial.print(":");
Serial.println(second(t));
delay(1350);
}
</syntaxhighlight>
== Ejemplo 3 ==
Muestra Arduino como un reloj sin hardware externo. Se sincroniza por mensajes enviados por el puerto serie, muestra la fecha y hora cada segundo por consola y administra el LED incorporado. Debes enviar algo como T1531562400 (2018-7-14 10:00:00).
<syntaxhighlight lang="c++">
#include <TimeLib.h>
#define TIME_HEADER "T" //Encabezado de mensaje de sincronizacion
void setup() {
Serial.begin(115200);
pinMode(13, OUTPUT);
Serial.println("Esperando sincronizacion");
}
void loop(){
if (Serial.available()) {
sinc();
}
if (timeStatus()!= timeNotSet) {
printFecha();
}
if (timeStatus() == timeSet) {
digitalWrite(13, HIGH); //Esta sincronizado
}else{
digitalWrite(13, LOW); //Requiere sincronizacion
}
delay(1000);
}
void printFecha(){
if (day() < 10){
Serial.print("0");
}
Serial.print(day()); //dia
Serial.print("-");
if (month() < 10){
Serial.print("0");
}
Serial.print(month()); //mes
Serial.print("-");
Serial.print(year()); //año
Serial.print(" ");
if (hour() < 10){
Serial.print("0");
}
Serial.print(hour()); //hora
Serial.print(":");
if (minute() < 10){
Serial.print("0");
}
Serial.print(minute()); //minutos
Serial.print(":");
if (second() < 10){
Serial.print("0");
}
Serial.println(second()); //segundos
}
void sinc() {
if (Serial.find(TIME_HEADER)) {
unsigned long pctime = Serial.parseInt();
if (pctime >= 1357041600) { //1-ENE-2013
setTime(pctime); //Sincroniza reloj Arduino
}
}
}
</syntaxhighlight>
== Ejemplo 4 ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria Time</categorytree>
== Referencias ==
* [https://www.prometec.net/time-arduino/ Libreria Time] - Prometec
[[Category:Libreria Time]]
mux4td8677mtu1ddyhiejkh3kx05v8b
setup()
0
23
2162
1515
2018-07-24T22:36:33Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
La función '''setup()''' se invoca cuando se inicia un boceto. Úselo para inicializar variables, modos de pin, comenzar a usar bibliotecas, etc. La función '''setup()''' solo se ejecutará una vez, después de cada encendido o reinicio de la placa Arduino.
== Sintaxis ==
<pre>
void setup(){
//Configuracion aqui
}
</pre>
== Advertencia ==
{{Nota|Es obligatorio que esta sentencia sea incluida en cada [[boceto]], aunque puede estar vacía.}}
== Ejemplo ==
Las instrucciones contenidos en setup() solo se ejecutan una vez al arrancar la placa. Luego de resetear o retirar energia se vlvera a ejecutar una sola vez.
<syntaxhighlight lang="c++">
const byte pulsador = 3;
void setup(){
Serial.begin(115200);
pinMode(LED_BULITIN, OUTPUT);
pinMode(pulsador, INPUT_PULLUP);
}
void loop(){
//...
}
</syntaxhighlight>
== Vea también ==
* [[loop()]]
* [[void]]
* [[IDE]]
* [[boceto]]
[[Category:Estructura]]
74ykvstqkllgr3hcv9vgeug0mxevaed
shiftIn()
0
184
4704
4695
2019-07-14T17:43:40Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Recibe en un byte de datos un bit cada vez desde un pin. Comienza a partir del bit más significativo (más a la izquierda)(MSB) o menos significativo (más a la derecha)(LSB). Para cada bit, el pin de reloj pasa a nivel alto, el siguiente bit se lee de la línea de datos y a continuación el pin de reloj pasa a nivel bajo.
== Sintexis ==
<pre>
shiftIn(dataPin, clockPin, bitOrder);
</pre>
== Parámetros ==
;dataPin: aqui pondrás el puerto a leer.
;clockPin: es el pin que comandara el cambio (reloj)
;bitOrder: puede ser MSBFIRST (Primero el bit más significativo) o LSBFIRST (Primero el bit menos significativo).
== Retorna ==
Retorna el byte leido.
== Advertencias ==
* Si vamos a interactuar con un dispositivo que está sincronizado por flancos de subida ([[RISING / FALLING|RISING]]), necesitamos asegurarnos de que el pin de reloj está en estado LOW antes de la primera llamada a '''shiftIn()''' con una llamada a digitalWrite(pinReloj, LOW).
== Comentarios ==
* Esta es una aplicación por software; Arduino también proporciona un bus [[SPI]] que es la complementación por hardware, más rápida, pero sólo funciona en pines específicos.
== Ejemplo ==
<syntaxhighlight lang="c++">
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones bit y byte</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftin/ Guia de referencia]
* [https://www.prometec.net/funciones1/ Funciones de Arduino] - Prometec
[[Category:Funciones bit y byte]]
3lvq78fm265sqz7t03cd02j9ycdj4xo
shiftOut()
0
185
5264
5263
2020-03-15T03:16:02Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Envia en un byte de datos un bit a cada vez por el pin indicado. Comienza a partir del bit más significativo (más a la izquierda)(MSB) o menos significativo (más a la derecha)(LSB) dependiendo del parámetro bitOrden. Cada bit se escribe a su vez en un pin de datos, después de lo cual un pulso de reloj se activa (pasa a nivel alto, y a continuación, a nivel bajo) para indicar que el bit está disponible.
{{Nota|Si está interactuando con un dispositivo que está administrado por bordes ascendentes (RISING), deberá asegurarse de que el pin del reloj esté bajo antes de la llamada '''shiftOut()''', por ejemplo, con una llamada a [[digitalWrite()|digitalWrite(clockPin, LOW)]].}}
== Sintexis ==
<pre>
shiftOut(dataPin, clockPin, bitOrder, valor);
</pre>
== Parámetros ==
;dataPin: el pin en el que se muestra cada bit [[int]]
;clockPin: el pin para alternar una vez que el dataPin se ha establecido en el valor correcto [[int]]
;bitOrder: qué orden desplazar los bits; ya sea MSBFIRST o LSBFIRST. (Bit más significativo primero, o, bit menos significativo primero)
;value: los datos para desplazarse. [[byte]]
== Retorna ==
La función '''shiftOut()''' escribe en la salida 1 byte (8 bits) por lo que requiere una operación de dos pasos para valores de salida mayores que 255 osea variables de 2 bytes tipo [[int]].
== Advertencias ==
* Los dataPin y clockPin deben estar ya configurados como salida con [[pinMode()]].
== Ejemplo 1 ==
En este ejemplo conectamos un 74x595 con 7 LED. Vcc(16)=MR(10)=+5V, GND(8)=OE(13)=GND.
<syntaxhighlight lang="c++">
const byte dataPin = 8; //Pin 14 de 74x595
const byte clockPin = 9; //Pin 11 de 74x595
const byte latchPin = 10; //Pin 12 de 74x595
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
for (byte i=0; i<256; i++) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, i);
digitalWrite(latchPin, HIGH); //Muestra
delay(500);
}
}
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo conectamos un 74x595 con un display 7 segmentos de cátodo comun. Vcc(16)=MR(10)=+5V, GND(8)=OE(13)=GND.
<syntaxhighlight lang="c++">
const byte dataPin = 8; //Pin 14 de 74x595
const byte clockPin = 9; //Pin 11 de 74x595
const byte latchPin = 10; //Pin 12 de 74x595
const byte dig[10]={
252, //0
96, //1
218, //2
242, //3
102, //4
182, //5
190, //6
224, //7
254, //8
230 //9
};
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
for (byte i=0; i<10; i++) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, dig[i]);
digitalWrite(latchPin, HIGH); //Muestra
delay(500);
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones bit y byte</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftout/ Guia de referencia]
* [https://www.prometec.net/funciones1/ Funciones de Arduino] - Prometec
* [https://www.youtube.com/watch?v=mV-JAVocaLs Registro de desplazamiento 74595] - Editronikx
* [https://arduino.perut.org/e_35.htm Shift register] Apuntes de Arduino
[[Category:Funciones bit y byte]]
38mirlpshdkb76p926e150stlub5ltu
sin()
0
37
4473
4472
2019-06-24T22:38:30Z
Kike GL
2
/* Descripción */
wikitext
text/x-wiki
== Descripción ==
Calcula el seno de un ángulo (en radianes). El resultado está comprendido entre -1 y 1.
{{Nota|El angulo en radianes se expresa en 2*PI osea [[PI|TWO_PI]]}}
== Sintaxis ==
<pre>
sin(rad);
</pre>
== Parámetros ==
;rad: en ángulo en radianes. [[float]]
== Retornos ==
El seno del ángulo [[float]]. Valores entre -1 y +1.
== Advertencias ==
* El angulo debe estar expresado en radianes entre 0 y [[PI|TWO_PI]].
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
Serial.println(sin(0), 3); //0.000
Serial.println(sin(HALF_PI/2), 3); //0.707
Serial.println(sin(HALF_PI), 3); //1.000
Serial.println(sin(PI), 3); //0.000
Serial.println(sin(PI+HALF_PI), 3); //-1.000
Serial.println(sin(TWO_PI), 3);} //0.000
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
}
void loop(){
for (float n=0; n<TWO_PI; n+=0.01){
Serial.println(sin(n));
}
}
</syntaxhighlight>
== Vea también ==
* [[cos()]]
* [[tan()]]
* [[asin()]]
* [[acos()]]
* [[atan()]]
* [[PI]]
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones trigonometricas]]
oafgmz23h6ikoms99zrflne5runzdp9
sizeof()
0
186
5273
5272
2020-03-16T15:10:21Z
Kike GL
2
/* Ejemplo 1 */
wikitext
text/x-wiki
== Descripción ==
Evalúa el tamaño de memoria reservado para una variable o [[matriz]] en bytes. Acepta cualquier tipo de datos: [[char]], [[byte]], [[int]], [[word]], [[long]], [[double]], [[float]], etc.
== Sintexis ==
<pre>
sizeof(variable);
sizeof(matriz);
</pre>
== Parámetros ==
;matriz:nombre de la matriz a evaluar, que puede ser tipo: [[char]], [[byte]], [[int]], [[word]], [[long]], [[float]].
== Retorna ==
Número de bytes ocupados por variable o matriz. [[size_t]]
== Advertencias ==
* '''sizeof()''' al contar en bytes, solo coincide con la cantidad de elementos si son tipo: [[bool]] o [[char]] o [[byte]].
* Si quieres hallar el numero de elementos de una matriz: [[int]], [[long]], [[double]] o [[float]]. Lo más correcto sería:
<pre>
sizeof(matriz) / sizeof(matriz[0]);
sizeof(matriz) / sizeof(tipo);
</pre>
Para así obtener el tamaño en cantidad de elementos y no en bytes.
== Ejemplo 1 ==
Para obtener la cantidad de elementos solo hay que dividir entre el numero de bytes de cada elemento
<syntaxhighlight lang="c++">
int valores[] = {1023, 45056, 77};
byte indice = sizeof(valores); //6 bytes
byte indice = sizeof(valores) / sizeof(int); //3 elementos
bool A[][4] = {{0,1,0,0}, {0,0,1,0}, {0,1,1,0}};
byte indice = sizeof(A); //12 bytes
byte indice = sizeof(A) / sizeof(bool); //12 elementos
byte indice = sizeof(A) / (4 * sizeof(bool)); //3 fila + 4 columnas
</syntaxhighlight>
== Ejemplo 2 ==
Trabajar con una matriz bidireccional.
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(9600);
int A[][4] = {{1024,5000,0,24344}, {11111,3000,12345,670}, {0,10000,1,62000}};
byte A1 = sizeof(A);
byte A2 = sizeof(A) / sizeof(int);
byte A3 = sizeof(A) / (4 * sizeof(int));
Serial.println(A1); //24 bytes
Serial.println(A2); //12 elementos
Serial.println(A3); //3 filas + 4 columnas
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 3 ==
Creamos una matriz de caracteres con cierto valor y luego mostramos carácter a carácter.
<syntaxhighlight lang="c++">
const byte matriz[]="Esto es una matriz";
void setup(){
Serial.begin(115200);
for (byte i=0; i<sizeof(matriz)-1; i++{
Serial.write(matriz[i]); //Caracter
Serial.print(" = ");
Serial.println(matriz[i]); //Codigo ASCII
delay(100);
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea tambien ==
* [[tone()]]
* [[noTone()]]
* [[pulseln()]]
* [[pulselnLong()]]
* [[shiftIn()]]
* [[shiftOut()]]
* [[matriz]]
== Referencias ==
* [https://www.arduino.cc/reference/en/language/variables/utilities/sizeof/ sizeof()] - Arduino
* [http://manueldelgadocrespo.blogspot.com/p/sizeof.html sizeof()] - Manuel Delgado
[[Category:Funciones]]
de4l6ag05w3xnclo5qxsatrgyjbz5mk
sprintf()
0
366
4045
4044
2019-05-28T01:12:15Z
Kike GL
2
/* Ejemplo 3 */
wikitext
text/x-wiki
== Descripción ==
Crea una cadena tipo [[string]] formateada en la variable str, en lugar de imprimir.
El tamaño del búfer debe ser lo suficientemente grande como para contener toda la cadena resultante (vea [[snprintf()] para una versión más segura).
Un carácter nulo de terminación se agrega automáticamente después del contenido.
Después del parámetro de formato, la función espera al menos tantos argumentos adicionales como sea necesario para el formato.
== Sintaxis ==
<pre>
sprintf(str, formato, argumentos);
</pre>
== Parámetros ==
;str:Puntero a un buffer donde se almacena la cadena tipo [[string]] resultante. El buffer debe ser lo suficientemente grande como para contener la cadena resultante.
;formato:Cadena que contiene el formato que sigue las mismas especificaciones que el formato en [[printf()]]. Puedes representar [[int]] (%d), [[long]] (%ld) y [String|cadenas] (%s).
;argumentos:Dependiendo de la cadena de formato, la función puede esperar una secuencia de argumentos adicionales, cada uno con un valor que se utilizará para reemplazar un especificador de formato en la cadena de formato (o un puntero a una ubicación de almacenamiento, para n). Debe haber al menos tantos de estos argumentos como la cantidad de valores especificados en los especificadores de formato.
{| class="wikitable"
|+Especificadores disponibles como formato
|-
! Especificador !! Descripción !! Ejemplo
|-
| %d o %i || [[int]] formato decimal || 392
|-
| %0d o %0i || [[int]] formato decimal || 03
|-
| %o || [[int]] formato octal || 610
|-
| &u || [[unsigned int]] || 7235
|-
| %x o %X || [[unsigned int]] formato hexadecimal || 12345
|-
| %f o %F || [[float]] formato decimal || 3.1416
|-
| %a o %A || [[float]] formato hexadecimal || 0XC.90FEP-2
|-
| %e o %E || Notación científica || 3.9263e+2
|-
| %c || Carácter || a
|-
| %s || Cadena de caracteres || Hola
|-
| %p || Puntero || b80000000
|-
| %n || No imprime ||
|-
| %% || simbolo % || %
|}
== Retorno ==
* En caso de éxito, se devuelve la cantidad total de caracteres escritos. Este recuento no incluye el carácter nulo adicional adjuntado automáticamente al final de la cadena.
* En caso de falla, se devuelve un número negativo.
== Comentarios ==
* La función ignora argumentos adicionales.
* Un carácter nulo de terminación se agrega automáticamente después del contenido.
* Después del parámetro de formato, la función espera al menos tantos argumentos adicionales como sea necesario para el formato.
* No maneja [[float]] pero lo puedes imitar con dos enteros.
== Advertencias ==
* La función sprintf() no hace el trabajo de imprimir, solo prepara una variable para ello.
* El tamaño del búfer debe ser lo suficientemente grande como para contener toda la cadena resultante (ver [[snprintf]] para una versión más segura).
== Ejemplo 1 ==
Esto tiene 3 enteros de 2 dígitos con ceros a la izquierda, separados por ":". La lista de parámetros, hora, minuto, segundo, proporciona los números con los que se imprime el sprintf.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
char buffer[50];
byte hora = 13;
byte min = 2;
byte seg = 18;
sprintf(buffer, "%02d:%02d:%02d", hora, min, seg);
Serial.print(buffer); //13:02:18
sprintf(buffer, "Son las %d horas %d minutos %d segundos.", hora, min, seg);
Serial.println(buffer); //Son las 13 horas 2 minutos 18 segundos.
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
char buffer[50];
int n, a=5, b=3;
n = sprintf(buffer, "%d plus %d is %d", a, b, a+b);
printf("[%s] is a string %d chars long\n",buffer,n);
Serial.print(buffer);
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 3 ==
<syntaxhighlight lang="c++">
void setup(){
char buffer[30];
char buf1[6];
float mfloat = 23.245;
dostrf(mfloat, 5, 2, buf1);
sprintf(buffer,"Float %s", buf1);
Serial.print(buffer);
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 4 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
char texto[50];
int a=5, b=3;
sprintf(texto, "%d mas %d es %d", a, b, a+b);
Serial.print(texto);
}
void loop(){
//Nada.
}
</syntaxhighlight>
== Ejemplo 5 ==
<syntaxhighlight lang="c++">
#include <RTClib.h>
#include <SD.h>
RTC_Millis rtc;
File Archivo;
void setup(){
pinMode(10, OUTPUT); //Se establece como salida el pin correspondiente a SS.
//Estado SD
if (!SD.begin(10)) {
Serial.println("Se ha producido un fallo al iniciar la comunicación");
return;
}
Serial.println("Se ha iniciado la comunicación correctamente");
char archivo[13];
sprintf(archivo, "%4d%02d%02d.txt", year, month, day);
/*** INICIO ESCRITURA ***/
Archivo = SD.open(archivo, FILE_WRITE);
if (Archivo) {
Archivo.println("Esto es lo que se está escribiendo en el archivo");
Archivo.close();
Serial.println("Todos los datos fueron almacenados");
}else{
Serial.println("El archivo no se abrió correctamente");
}
/* FIN ESCRITURA */
/*** INICIO LECTURA ***/
Archivo = SD.open(archivo);
if (Archivo) {
Serial.println("Información contenida en archivo: ");
While (Archivo.available()) {
Serial.write(Archivo.read());
}
Archivo.close();
}else{
Serial.println("El archivo no se abrió correctamente");
}
/* FIN LECTURA */}
void loop(){
//Si tengo algún dato para escribir
if(tengo){
/*** INICIO ESCRITURA ***/
Archivo = SD.open(archivo, FILE_WRITE);
if (Archivo) {
Archivo.print(year);
Archivo.print("Valor pin 11: ");
Archivo.println(digitalRead(11));
Archivo.close();
Serial.println("Dato almacenado");
}else{
Serial.println("El archivo no se abrió correctamente");
}
/* FIN ESCRITURA */
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Serial</categorytree>
== Referencias ==
* [http://www.cplusplus.com/reference/cstdio/sprintf/ sprint()] - cplusplus
* [https://programarfacil.com/blog/arduino-blog/conversion-de-numeros-a-cadenas-en-arduino/ Convesion de numeros a cadena] - Luis del Valle
[[Category:Serial]]
jc9goyt07sot5om5pn7lgi2cqgkaiv7
sq()
0
170
4291
4290
2019-06-11T23:34:44Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Calcula el cuadrado de un número: el número multiplicado por sí mismo.
== Sintaxis ==
<pre>
sq(valor);
sq(variable);
</pre>
== Parametros ==
;valor: numero a operar
;variable: nombre de variable a operar
== Retorna ==
El cuadrado del numero. Tipo [[long]].
== Advertencias ==
* Nada
== Ejemplos ==
<syntaxhighlight lang="c++">
byte n = sq(3); //9
sq(n); //81
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones matematicas</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/en/language/functions/math/sq/ Guia de referencia]
[[Category:Funciones matematicas]]
h3ovxsadidl9fpygw1hp28yxuomuyeb
sqrt()
0
171
4289
4206
2019-06-11T23:34:18Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Calcula la raíz cuadrada de un número. retorna un float.
== Sintaxis ==
<pre>
sqrt(valor);
sqrt(variable);
</pre>
== Parámetros ==
;variable: nombre de la variable a operar.
== Retorna ==
Retorna un numero tipo [[float]].
== Advertencias ==
Nada.
== Ejemplo ==
<pre>
sqrt(9); //3
</pre>
== Vea también ==
<categorytree mode=all>Funciones matematicas</categorytree>
== Referencias externas ==
[[Category:Funciones matematicas]]
mtqqz3oy9fm1qyzu5dp6zde3svhvypz
static
0
201
5197
5186
2020-02-02T04:21:05Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Palabra clave conocida como '''calificadora'''. Se usa antes del tipo de datos de una variable, para modificar la manera en que el compilador y el [[boceto]] deben tratar dicha variable.
Se usa para crear variables que solo son visibles dentro de una función. Sin embargo a diferencia de las variables locales que se crean y destruyen cada vez que se invoca una función, las variables '''static''' persisten más allá de la llamada a la función, preservan sus datos entre llamadas a funciones.
{{Nota|Las variables declaradas como '''static''' sólo se crean e inicializan la primera vez que una función se llama.}}
== Sintaxis ==
<pre>
static [tipo] variable [= valor];
</pre>
== Parámetros ==
;tipo: tipo de dato. Puede ser [[char]], [[byte]]; [[int]], [[long]], [[float]], etc de forma explicita u incluir un subfijo en '''valor'''
{| class="wikitable col2cen"
|+Subfijos
!Tipo!!Subfijo!!Ejemplo
|-
|[[int]]||ninguno||123
|-
|[[unsigned int]]||U||123U
|-
|[[long]]||L||123L
|-
|[[unsigned long]]||UL||123UL
|-
|[[float]]||F||1.23F
|}
;variable:nombre de la variable a declarar.
;valor:valor a almacenar en el rango del tipo de dato. Puede especificar la '''base''' del dato usando un prefijo.
{| class="wikitable col2cen"
|+Prefijos
!Base!!Prefijo!!Comentario!!Ejemplo
|-
|DEC||ninguno||Dígitos 0~9||123
|-
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
|-
|OCT||0||digitos 0~7||0173
|-
|BIN||B||0 o 1||B1110011
|}
== Retorno ==
Nada.
== Comentarios ==
* Todas las variables son almacenadas en [[SRAM]] salvo [[const]].
== Advertencias ==
* Solo son visibles dentro de la función donde fueron creadas.
* A diferencia de una [[variable local]] que se destruyen al finalizar la función, las variables '''static''' sobreviven a la función y mantienen su valor en la próxima llamada a dicha función.
== Ejemplo ==
<syntaxhighlight lang="c++">
const byte alto = 20;
const char bajo = -20;
const byte paso = 5; //Tamaño de paso
void setup(){
Serial.begin(115200);
}
void loop(){
static int posicion;
int hoy = camino(paso);
Serial.println(hoy);
delay(10);
}
int camino(byte mover){
posicion += random(-mover, mover + 1);
if (posicion < bajo){ //Comprueba los límites alto y bajo
posicion = alto; //Refleja el número de vuelta en dirección negativa
}else if(posicion > alto){
posicion = bajo; //Refleja el número de vuelta en dirección positiva
}
return posicion;
}
</syntaxhighlight>
== Vea también ==
* [[variable publica]]
* [[variable local]]
* [[matriz]]
* [[volatile]]
* [[const]]
* [[include|#include]]
* [[define|#define]]
* [[Comentarios]] - <nowiki>(//)</nowiki>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/variables/variable-scope--qualifiers/static/ Guia de referencia]
[[Category:Variables]]
swcj7qlt17cysqu71vj8gfxgmr66q1r
string
0
139
5232
5231
2020-02-02T18:50:45Z
Kike GL
2
/* Ejemplo 7 */
wikitext
text/x-wiki
== Descripción ==
En realidad '''string''' o cadena de caracteres no es un tipo de dato y se construye como una [[matriz]] de tipo [[char]] con terminación nula.
Las cadenas deben terminar con un carácter nulo (ASCII código 0). Esto permite que funciones como Serial.print() sepan donde terminan las cadenas. De lo contrario, seguirían leyendo los siguientes bits de memoria que ya no pertenece a esa cadena. Esto significa que la cadena tiene que tener espacio para un carácter más que el texto que desea que contenga.
== Sintaxis ==
<pre>
char variable[] = "valor";
char variable[] = {'val1', 'val2'...};
char* variable = "valor";
</pre>
== Parametros ==
;variable:Es el nombre de la matriz.
;valor:Es una sola cadena de caracteres entre comillas dobles.
;valx:Es un carácter entre comillas simples.
== Comentarios ==
* Se puede declarar una matriz de tamaño especifico. Ejemplo char cadena_1[15];
* Declarar y asignar una matriz, sin terminal. Ejemplo char cadena_2[8] = {'a','r','d','u','i''n','o'};
* Declarar y asignar una matriz, con terminal. Ejemplo char cadena_3[8] = {'a','r','d','u','i''n','o','\0'};
* Declarar y asignar una matriz. Ejemplo char cadena_4[] = "arduino";
* Declarar y asignar una matriz, dejando espacio en blanco. Ejemplo char cadena_5[15] = "arduino";
* Declarar y asignar una matriz puntero. Ejemplo char* cadena_6[] = {"uno","dos","tres"};
{{Nota|Las cadenas deben terminan con un carácter nulo (código ASCII 0), para permitir que las funciones (como [[Serial.print()]]) sepan dónde termina la cadena. De lo contrario, continuarían leyendo bytes de memoria posteriores que no son realmente parte de la cadena.}}
== Matriz de tamaño dinámico ==
Al instanciar una matriz se reserva espacio en la memoria para almacenar sus elementos y una vez creado es imposible cambiar su tamaño, entre otras cosas porque puede no haber espacio suficiente a continuación en la memoria.
Pero nada nos impide crear un nueva matriz con el tamaño deseado (más grande o más pequeño), copiar el contenido de la matriz original y finalmente eliminar la matriz original. Así es precisamente como trabaja una matriz de tamaño dinámico. Pues eso es exactamente lo que hace la libreria [https://github.com/luisllamasbinaburo/Arduino-List List].
== Advertencia ==
* Tenga en cuenta, que las matrices de caracteres se conocen como '''string''' con s minúscula y las instancias de la '''clase String''' se denominan cadenas con S mayúscula.
* Las constantes de cadena especificadas con "comillas dobles" son tratadas como matrices de [[char]] y no como objetos de la clase [[String]].
* Las variables tipo [[char]] deben ser definidos '''siempre''' usando comillas simples. Ver cadena1, cadena2 y cadena3 en ejemplo 1.
* Es posible crear cadenas como '''matriz''' de caracteres usando comillas dobles. Ver cadena4, cadena5 y cadena6 en ejemplo 1.
* Una vez definida una matriz no puede cambiar de tamaño. Ver matriz dinamica.
== Ejemplo 1==
Posibilidades para la declaración de cadenas
# Declarar una matriz de caracteres inicializandola. Ver cadena1.
# Declarar una matriz de caracteres (con un carácter extra) y el compilador añadirá el carácter nulo requerido. Ver cadena2.
# Agregar explicitamente el caracter nulo. Ver cadena3.
# Inicializar una constante de cadena entre comillas; el compilador ajustará el tamaño de la matriz para adaptarse a la cadena y un carácter nulo de terminación. Ver cadena4.
# Incializar una matriz con un tamaño explícito y una constante de cadena. Ver cadena5.
# Inicializar la matriz, dejando espacio extra para una cadena larga. Ver cadena6.
# Algunos errores. Ver cadena7 y cadena8.
<syntaxhighlight lang="c++">
char cadena1[15];
char cadena2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char cadena3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
char cadena4[ ] = "arduino";
char cadena5[8] = "arduino";
char cadena6[15] = "arduino";
char cadena7 = 'Arduino'; //Error, falta []
char cadena8[] = 'Arduino'; //Error, debes usar comilla doble.
</syntaxhighlight>
== Ejemplo 2 ==
En el código siguiente, el asterisco después del tipo de datos '''char*''' indica que se trata de una matriz de [[puntero]]. Todos los nombres de matrices son en realidad punteros, así que esto es necesario para hacer una matriz de matrices. Los punteros son una de las partes más esotéricas de C ++ para que los principiantes puedan entender, pero no es necesario entender los punteros en detalle para usarlos de la manera aquí descrita.
<syntaxhighlight lang="c++">
char* fraces[] = {
"Esta es la cadena 1",
"Esta es la cadena 2",
"Esta es la cadena 3",
"Esta es la cadena 4",
"Esta es la cadena 5",
"Esta es la cadena 6"
};
void setup(){
Serial.begin(115200);
for (byte i=0; i<6; i++){
Serial.println(fraces[i]);
}
}
void loop(){
//Nada
}</syntaxhighlight>
== Ejemplo 3 ==
Como convertir una matriz [[char]] en [[long]].
<syntaxhighlight lang="c++">
char* texto1 = "-12345"; //Es lo mismo que char texto1[] = "-12345";
char* texto2 = "-12.345"; //Es lo mismo que char texto2[] = "-12.345";
void setup(){
Serial.begin(9600);
long valor1 = atol(texto1);
Serial.println(valor1);
float valor2 = atof(texto2);
Serial.println(valor2);
}
void loop(){
//Nada.
}
</syntaxhighlight>
== Ejemplo 4 ==
En el siguiente ejemplo usuario pretende usar 4K de [[SRAM]] cuando Arduino [[UNO]] solo tiene 2K.
<syntaxhighlight lang="c++">
int var[2000]; //Error
</syntaxhighlight>
== Ejemplo 5 ==
Para borrar un string se puede usar.
<syntaxhighlight lang="c++">
char nom[] = "Arduino";
nom[0] = '\0';
</syntaxhighlight>
== Ejemplo 6 ==
Para añadir un carácter al final se puede usar. Recuerda que debe haber estacio sufiente en el
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
char nom[] = "Arduino";
byte len = strlen(nom);
nom[len++] = 's';
Serial.print(nom);
}
void loop() {
//Nada
}
</syntaxhighlight>
== Ejemplo 7 ==
No se puede crear una [[matriz]] de matrices. Pero si se puede usar punteros a matrices, asi:
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
byte cero[] = { 0xA6, 0xD4, 0xAC, 0xF8 };
byte uno[] = { 0xE9, 0x48, 0xCC, 0xE3 };
byte dos[] = { 0x46, 0x6F, 0xA5, 0xF8 };
byte tres[] = { 0xC2, 0x9D, 0xFC, 0x33 };
byte* matriz[4] = {cero, uno, dos, tres};
for (byte i=0; i<4; i++){
for (byte j=0; j<4; j++){
Serial.print(matriz[i][j], HEX);
Serial.print(", ");
}
Serial.println();
}
}
void loop() {
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tipo dato</categorytree>
== Referencias ==
* [https://www.luisllamas.es/convertir-texto-a-numero-arduino/ Convertir texto a numero] - Luis Llamas
* [http://panamahitek.com/tipos-de-datos-arrays-en-arduino/ Tipos de datos: Arrays] - José Villalaz
[[Category:Tipo dato]]
tnc4vfud0yjxiyo2b0iau8r335b3yhg
strlen()
0
400
2902
2901
2019-04-03T21:57:01Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
La función determina la longitud de un [[string]] excluyendo el carácter nulo final.
== Sintaxis ==
<pre>
strlen(matriz);
</pre>
== Parámetros ==
;matriz:nombre de la matriz [[char]] o [[string]] a analizar
== Retorno ==
La longitud del [[string]] en [[int]].
== Advertencias ==
Ninguna
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
char nom[] = "Arduino";
Serial.print(strlen(nom)); //7
}
void loop() {
//Nada
}</syntaxhighlight>
== Vea también ==
* [[string]]
* [[atol()]]
* [[atof()]]
== Referencias ==
[[Category:Funciones]]
4szrc83dt6k2a9j1hdb6qhshf26lbd4
strtoul()
0
403
5098
4509
2019-11-20T16:43:42Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Convertir una matriz [[char]] o [[string]] a [[unsigned long]] en la base dada.
== Sintaxis ==
<pre>
strtoul(matriz, *puntero, base);
</pre>
== Parametros ==
;matriz:Nombre de la matriz tipo [[string]].
;puntero:esta es la referencia a un objeto de tipo char*, cuyo valor es establecido por la función a continuación del valor numérico.
;base:que debe estar entre 2 y 36 inclusive, o el valor especial 0.
== Retorno ==
Numero tipo [[unsigned long]] o 0 si no lo logra.
== Advertencias ==
Nada.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
char texto[] = "12345";
char *ptr;
unsigned long a = strtoul(texto, &ptr, 10); //12345
a -= 12300;
Serial.println(a); //45
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
char rec[16], *ptr;
char data[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x02, 0x03, 0x0b };
sprintf(rec, "0x%X%X%X%X%X%X%X%X", data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]);
Serial.print("Matriz Hexadecimal: ");
Serial.println(rec);
unsigned long a = strtoul(rec, &ptr, 16);
Serial.print("El numero en decimal es: ");
Serial.println(a);
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones conversion</categorytree>
== Referencias ==
* [https://www.luisllamas.es/convertir-texto-a-numero-arduino/ Convertir texto a numero] - Luis LLamas
[[Category:Funciones conversion]]
o3jwbsomvq8424yqc1aald8kcg4deul
suma
0
91
5030
5029
2019-09-27T00:18:16Z
Kike GL
2
/* Retorna */
wikitext
text/x-wiki
== Descripción ==
La suma es una de las cuatro operaciones aritméticas primarias. El operador + (más) opera en dos operandos para producir la suma.
== Sintaxis ==
<pre>
variable = valor + variable + expresion;
</pre>
== Retorna ==
Suma aritmética o concatena si se trata de cadenas [[String]].
== Advertencias ==
* Al hacer operaciones aritméticas preste atención a los tipo de dato involucrados.
* Debido a que toda variable tiene un límite, una suma que resulte en un valor extremedamente alto puede tener un resultado sin sentido (por desbordamiento). Por ejemplo: que una suma de dos enteros positivos resulte en un valor negativo (si la variable es con signo), o que sea menor que el primer operando (si la variable es sin signo).
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
byte x = 10;
byte y = 5;
x = x + 30; //40
x++; //41 (Incrementa x en uno)
x += y; //46 (Incrementa x en y)
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
String frase = "Apuntes";
frase = frase + " de Arduino";
frase = frase + analogRead(A0);
frase = frase + millis();
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador aritmetico</categorytree>
<categorytree mode=all>Operador aritmetico compuesto</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/en/language/structure/arithmetic-operators/addition/ Guia de referencia de Arduino]
* [https://aprendiendoarduino.wordpress.com/2018/04/08/operadores-5/ Operadores] - Enrique Crespo
[[Category:Operador aritmetico]]
4gj84m4236nikpkaknqko4wovcl7ew8
suma compuesta
0
213
5014
5005
2019-09-26T23:58:39Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Suma un valor y lo guarda en la misma variable.
{{Nota|Es lo mismo que variable <nowiki>=</nowiki> variable + valor.}}
== Sintaxis ==
<pre>
variable += valor;
variable = variable + valor;
</pre>
== Parámetros ==
;variable: Nombre de la variable a operar. Puede ser de cualquier tipo: [[char]], [[byte]], [[int]], [[long]], [[float]].
;valor: Valor del mismo tipo que variable.
== Retorno ==
Retorna la variable incrementada en valor.
== Comentario ==
* En caso de que la variable sea de tipo [[String]] lo que se hace es concatenar como texto sin importar que sea un numero. Ver ejemplo 2
* Cual es la diferencia entre poner el operador delante o atrás de nombre de la variable ?
== Advertencias ==
* Tenga cuidado con no provocar desborde u obtendrá resultados inesperados.
* Tenga en cuanta la sutil diferencia entre += y =+
== Ejemplo 1 ==
En el caso de datos o variables numéricas se efectúa la '''suma'' y el resultado se guarda en misma variable.
<syntaxhighlight lang="c++">
byte n = 5;
n += 3; //8
n += 3; //11
</syntaxhighlight>
== Ejemplo 2 ==
En este caso no suma sino que concatena gracias al tipo de variable seleccionado.
<syntaxhighlight lang="c++">
String frase = "Apuntes";
frase += " de Arduino "; //Apuntes de Arduino
int n = 2018;
frase += n; //Apuntes de Arduino 2018
</syntaxhighlight>
== Ejemplo 3 ==
En este ejemplo nos hemos atrevido a usar el incremento sobre una variable tipo [[char]]. Se muestra A, C, E, G, I, K.
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(9600);
char x = 'A';
Serial.println(x);
for (byte n=0; n<5; n++){
x += 2;
Serial.println(x);
}
}
void loop(){
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Operador aritmetico</categorytree>
<categorytree mode=all>Operador aritmetico compuesto</categorytree>
== Referencias ==
[[Category:Operador aritmetico compuesto]]
oggnwz70gu3p2du1rnf6ciyzkj5u4vv
switch... case
0
59
4462
4461
2019-06-24T18:44:26Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripción ==
Es un condicional múltiple permitiendo evaluar una sola variable y que se ejecute uno o mas trozos de código, comparando la variable con cada uno de los valores especificados en las instrucciones '''case'''. Cuando se encuentra una sentencia case cuyo valor coincide con el de la variable, el código bajo esa declaración '''case''' se ejecuta.
{{Tip|También llamado condicional múltiple.}}
La palabra reservada [[break]] interrumpe la sentencia '''switch''', y se usa normalmente al final de cada declaración case. Sin una declaración [[break]], la sentencia '''switch''' continuará la ejecución de las siguientes expresiones hasta que se alcanza una interrupción o hasta el final de la sentencia '''switch'''.
La palabra reservada '''default''' se usa para ejecutar código cuando el valor ingresado no coincide con ninguno de los '''case'''. Si esto último llega a suceder pero no hay sección '''default''', la sentencia '''switch''' simplemente se ignorará y flujo de código seguirá como si no estuviera ahí.
== Sintaxis ==
<pre>
switch (var) {
case label1:
// instrucciones
break;
case label2:
// instrucciones
break;
default:
// instrucciones
[break;]
} </pre>
== Parámetros ==
;var:Variable a evaluar
;labeln:Valor posible de la variable
;default:Es el grupo de instrucciones a ejecutar solo si '''ninguna''' label se alcanzo.
== Comentarios==
* Puede poner tantos '''case''' como quieras pero siempre se evaluara la misma variable.
== Advertencias ==
No debes olvidar el [[break]] o todas las sentencias serán ejecutas. Puedes olvidar [[break]] solo en la ultima condición.
== Ejemplo 1 ==
En este ejemplo evaluamos la variable '''var''' que obtuvo un dato de un pin analógico.
<syntaxhighlight lang="c++">
int var = analogRead(A0);
switch (var){
case 1:
//hace algo cuando var es igual a 1
break
case 2:
//hace algo cuando var es igual a 2
break;
default: //Opcional
//si nada coincide, hace lo predeterminado
}
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo evaluamos la variable '''var''' que obtuvo un dato de un pin analógico.
<syntaxhighlight lang="c++">
int var = analogRead(A0);
switch (var){
case 1:
case 2:
case 3:
//hace algo cuando var es igual a 1, 2 o 3.
break
case 4:
case 5:
case 6:
//hace algo cuando var es igual a 4, 5 o 6.
break;
default: //Opcional
//si nada coincide, hace lo predeterminado
}
</syntaxhighlight>
Al no poner [[break]] luego de algunos case se logra que cualquiera de esos valores ejecute el mismo codigo.
== Ejemplo 3 ==
En este ejemplo ponemos un LED RGB (rojo, verde y azul) en los pines digitales 2, 3 y 4. Luego desde el teclado si pulsamos R se prende el LED rojo y lo volvemos a pulsar se apaga. Similar con verde y azul.
<syntaxhighlight lang="c++">
void setup() {
Serial.begin(9600);
pinMode(2, OUTPUT); //Rojo
pinMode(3, OUTPUT); //Verde
pinMode(4, OUTPUT); //AZUL
}
void loop() {
//Esperamos una tecla
if Serial.available()) {
char tecla = Serial.read();
switch (tecla){
case 'R':
digitalWrite(2, !digitalRead(2));
break;
case 'G':
digitalWrite(3, !digitalRead(3));
break;
case 'B':
digitalWrite(4, !digitalRead(4));
break;
}
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Estructura control</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/en/language/structure/control-structure/switchcase/ Guia de referencia de Arduino]
* [http://manueldelgadocrespo.blogspot.com/p/instruccion-swi.html switch] - Manuel Delgado
* [http://www.arduino.utfsm.cl/referencia/switch-case/ switch case] - UTFSM
* [http://diwo.bq.com/maquinas-de-estado-switch-case/ Maquina de estado] - Diwo
[[Category:Estructura control]]
i37efsy93mj6pzzaqaab4mztygub935
tan()
0
39
4476
4475
2019-06-24T22:44:10Z
Kike GL
2
/* Advertencias */
wikitext
text/x-wiki
== Descripción ==
Calcula la tangente de un ángulo (en radianes). El resultado está comprendido entre negativo infinito e infinito.
== Sintaxis ==
<pre>
tan(rad);
</pre>
== Parámetros ==
;rad: el ángulo en radianes [[float]].
== Retornos ==
La tangente del ángulo [[float]].
== Advertencias ==
* El angulo debe estar expresado en radianes. Valores entre 0 y [[PI|TWO_PI]].
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
Serial.println(tan(0), 3); //0.000
Serial.println(tan(HALF_PI/2), 3); //1.000
Serial.println(tan(HALF_PI), 3); //-22877332.000
Serial.println(tan(PI), 3); //0.000
Serial.println(tan(PI+HALF_PI), 3); //-83858280.000
Serial.println(tan(TWO_PI), 3);} //0.000
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
void setup(){
Serial.begin(115200);
}
void loop(){
for (float n=0; n<TWO_PI; n += 0.01){
Serial.println(tan(n));
}
}
</syntaxhighlight>
== Vea también ==
* [[sin()]]
* [[cos()]]
* [[asin()]]
* [[acos()]]
* [[atan()]]
* [[PI]]
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones trigonometricas]]
0y3f5wrskts90uj6gqhu0b77z3x8q3y
timeStatus()
0
396
3036
3035
2019-04-27T21:11:13Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripcion ==
Es una funcion para gestionar los serviciod del temporizador. Esta funcion sirve para indicar si la hora se ha establecido y si se ha sincronizado recientemente.
== Sintaxis ==
<pre>
timeStatus()
</pre>
== Parámetros ==
Ninguno
== Retorno ==
;timeNotSet:la hora nunca se ha establecido, el reloj comenzó el 1-ENE-1970. Los valores de fecha y hora no son válidos.
;timeNeedsSync:la hora se había establecido pero un intento de sincronización no tuvo éxito. Valores validos pero pueden estar alterados.
;timeSet:La hora esta establecida y sincroniza.
== Comentarios ==
== Advertencias ==
La funcion '''timeStatus()''' solo esta disponible luego de añadir la libreria [https://github.com/PaulStoffregen/Time TimeLib.h] al [[boceto]].
== Ejemplo 1 ==
== Vea también ==
* [[Fecha y hora]]
* [[time_t]] - TimeLib.h
* [[tmElements_t]] - TimeLib.h
* [[setTime()]] - TimeLib.h
* [[adjustTime()]] - TimeLib.h
* [[makeTime()]]
* [[breakTime()]]
== Referencia ==
[[Category:Libreria Time]]
5phw5pa6h24jkgo7pgrut7ynqs043bn
time t
0
360
3467
3208
2019-05-06T00:03:33Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripcion ==
'''time_t''' es un tipo [[unsigned long]] de 4 byte (32 bits) usado para almacenar los segundos transcurridos desde el 1-ENE-1970 o también llamada [https://www.unixtimestamp.com Unix Time Stamp].
== Sintaxis ==
<pre>
time_t variable [= valor];
</pre>
== Parámetros ==
;variable: Nombre de la variable que definiras.
;valor: Numero del tipo TimeStamp de UNIX. Numero tipo [[unsigned long]].
== Funciones ==
{|class="wikitable"
|+Funciones disponibles para time_t
!Función!!Descripción!!Ejemplo
|-
|[[now()]]||Almacena la hora actual en tiempo UNIX||time_t t = now();
|-
|year()||Muestra el año||year();
|-
|month()||Muestra el mes (1~12)||month();
|-
|monthStr()||Nombre del mes (January, February, March, April, May, June, July...)||monthStr(month());
|-
|monthShortStr()||Nombre corto del mes (Jan, Feb, Mar, Dic) ||monthShortStr(month());
|-
|day()||Muetsra el dia (1~31)||day();
|-
|weekday()||Muestra dia de la semana (1=domingo) (1~7)||weekday();
|-
|dayStr()||Nombre del dia (Sunday, Monday, Tuesday, Wenesday, Thursday, Friday, Saturday)||dayStr(weekday());
|-
|dayShortStr()||Nombre corto del dia (Sun, Mon, Tue, Wen, Thu, Fri, Sat)||dayShortStr(weekday());
|-
|hour()||Muestra las horas (0~23)||hour();
|-
|minute()||Muestra los minutos (0~59)||minute();
|-
|second()||Muestra los segundos (0~59)||second();
|-
|[[millis()]]||Muestra los milisegundos (0~999)||millis();
|-
|hourFormat12()||Formatea a 12 horas||
|-
|isAM()||Devuelve verdadero por la mañana||isAM()
|-
|isPM()||Devuelve verdadero por la tarde||isPM();
|-
|[[setTime()]]||Establece fecha-hora. Puede ser en segundos o hr,min,sec,dia,mes,año.||setTime(0,0,0,14,7,2018);
|-
|[[adjustTime()]]||Ajusta la fecha-hora del sistema agregando un valor||adjustTime(3600);
|-
|[[setSyncProvider()]]||Establecer proveedor de hora externa||
|-
|[[setSyncInterval()]]||Establecer el número de segundos entre re-sincronizaciones||
|-
|[[timeStatus()]]||Indica si el tiempo se sincronizado recientemente. Devuelve: timeNotSet/timeNeedSync/timeSet||
|}
== Comentarios ==
* La libreria [https://github.com/PaulStoffregen/Time TimeLib.h] agrega la funcionalidad de reloj a Arduino sin hardware externo. Permite que un [[boceto]] obtenga la hora y la fecha como: segundo, minuto, hora, día, mes y año.
* También proporciona tiempo '''time_t''' estándar, por lo que los tiempos transcurridos se pueden calcular fácilmente y los valores de tiempo se pueden compartir en diferentes plataformas.
== Advertencias ==
* Tenga en cuenta que NO se requiere un parámetro para las funciones basicas. Sin embargo como el reloj sigue funcionando la demora en mostrar la hora no sera la misma si capturamos el tiempo en una variable del tipo time_t y la introducimos en las funciones.
* Un caso especial son las funciones de texto que requeriran incluir un valor o función para determinar su valor: dayStr(week(t)), dayShortStr(week(t)), monthStr(month()) y monthShortStr(month()).
== Ejemplo 1 ==
En este ejemplo incluimos la fecha hora 2018-7-14 10:0:0 y mostramos su avance cada 1350 milisegundos.
<syntaxhighlight lang="c++">
#include <TimeLib.h>
void setup(){
Serial.begin(9600);
setTime(10,0,0,14,7,2018); //h,min,seg,dia,mes,año
}
void loop(){
time_t t=now();
Serial.print(hour(t));
Serial.print(":");
Serial.print(minute(t));
Serial.print(":");
Serial.println(second(t));
delay(1350);
}
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo podemos enviar la fecha-hora por consola serie. Para convertir Unix Time te recomiendo [https://www.unixtimestamp.com/ usar esto]. Ejemplo: T1552204800 = 2019-MAR-10 8:00:00
<syntaxhighlight lang="c++">
#include <TimeLib.h>
#define TIME_HEADER "T" //Encabezado de mensaje de sincronizacion
void setup() {
Serial.begin(9600);
while (!Serial); //Solo se requiere para Leonardo
pinMode(13, OUTPUT);
Serial.println("Esperando mensaje de sincronizacion");
}
void loop(){
if (Serial.available()) {
sincro();
}
if (timeStatus() == timeSet) {
pantalla(); //Muestra fecha hora
digitalWrite(13, HIGH); //Sincronizado
}else{
digitalWrite(13, LOW); //Requiere sincronizar
}
delay(1000);
}
void sincro() {
if (Serial.find(TIME_HEADER)) {
unsigned long pctime = Serial.parseInt();
if (pctime >= 1357041600) { //Verifica valides de fecha-hora (mayor a 1-ENE-2013)
setTime(pctime); //Sincroniza reloj Arduino con fecha-hora recivida por puerto serie
}
}
}
void pantalla(){
Serial.print(year());
Serial.print('-');
Serial.print(month());
Serial.print('-');
Serial.print(day());
Serial.print(' ');
Serial.print(hour());
printDigito(minute());
printDigito(second());
Serial.println();
}
void printDigito(int dig){
Serial.print(':');
if (dig < 10){
Serial.print('0');
}
Serial.print(dig);
}
</syntaxhighlight>
== Ejemplo 3 ==
Con este ejemplo Arduino espera que se envíe desde el monitor un tiempo UNIX del formato T1531526400 (2018-7-14 0:0:0).
<syntaxhighlight lang="c++">
#include <TimeLib.h>
void setup(){
Serial.begin(9600);
pinMode(13, OUTPUT);
Serial.println("Esperando tiempo UNIX por puerto serie");
}
void loop(){
if (Serial.available()) {
sincroniza();
}
if (timeStatus()!= timeNotSet) {
reloj();
}
if (timeStatus() == timeSet) {
digitalWrite(13, HIGH); //Sincronizado
}else{
digitalWrite(13, LOW); //Falta sincronizar
}
delay(1000);
}
void reloj(){
Serial.print(year());
Serial.print("-");
if (month()<10){
Serial.print('0');
}
Serial.print(month());
Serial.print("-");
if (day()<10){
Serial.print('0');
}
Serial.print(day());
Serial.print(" ");
if (hour()<10){
Serial.print('0');
}
Serial.print(hour());
Serial.print(":");
if (minute() < 10){
Serial.print('0');
}
Serial.print(minute());
Serial.print(":");
if (second() < 10){
Serial.print('0');
}
Serial.println(second());
}
void sincroniza() {
const unsigned long DEFAULT_TIME = 1514764800; //1-ENE-2018
if (Serial.find("T")) {
unsigned long pc = Serial.parseInt();
//Controla valides mayor a 1-ENE-2018
if (pc >= DEFAULT_TIME) {
setTime(pc); //Ajusta la fecha-hora
}
}
}
</syntaxhighlight>
== Ejemplo 4 ==
Mostramos las cadenas de dia y mes. Recuerde que no es opcional el parametro.
<syntaxhighlight lang="c++">
#include <TimeLib.h>
void setup(){
Serial.begin(9600);
for (byte n=1; n<=7; n++){
Serial.print(dayStr(n));
Serial.print(" - ");
Serial.println(dayShortStr(n));
}
Serial.println("-------");
for (byte n=1; n<=12; n++){
Serial.print(monthStr(n));
Serial.print(" - ");
Serial.println(monthShortStr(n));
}
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria Time</categorytree>
== Referencias ==
* [https://playground.arduino.cc/Code/Time Guia de referencia Arduino]
* [https://github.com/PaulStoffregen/Time TimeLib.h] - Paul Stoffregen
* [https://github.com/adafruit/RTClib RTClib.h] - Adafruit
[[Category:Libreria Time]]
2r5bq9yz9lnrhr1tpmg8279dcqjidk8
tmElements t
0
394
3469
3029
2019-05-06T00:04:07Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
'''tmElements_t''' es una matriz de seis (6) elementos que proporciona la libreria TimeLib.h y que permite manipular de manera facil (sin tener que usar el Tiempo Unix) todos los elementos necesarios para definir una fecha-hora.
== Sintaxis ==
<pre>
tmElements_t variable;
</pre>
== Parámetros ==
;variable:Nombre de la variable que definiras.
== Métodos ==
{| class="wikitable"
|+Metodos disponibles para tmElementos_t
|-
! Metodo !! Descripcion
|-
| .Second || Segundo (0~59)
|-
| .Minute || Minuto (0~59)
|-
| .Hour || Hora (0~23)
|-
| .Day || Dia (1~31)
|-
| .Month || Mes (1~12)
|-
| .Year || Año (0~99) resta de 1970.
|}
== Comentarios ==
Para representar el año 2019 debes poner 49 (2019-1970) y no olvidar sumar 1920 nuevamente al resultado.
== Advertencias ==
== Ejemplo 1 ==
En este ejemplo usamos la función [[makeTime()]] para crear el Tiempo Unix de una fecha-hora. Ejemplo 2019-3-21 8:00:00
<syntaxhighlight lang="c++">
#include <TimeLib.h>
void setup(){
Serial.begin(115200);
tmElements_t tx;
tx.Second = 0;
tx.Minute = 0;
tx.Hour = 8;
tx.Day = 21;
tx.Month = 3;
tx.Year = 49; //2019-1970
time_t tiempo = makeTime(tx);
Serial.println(tiempo); //1553155200
}
void loop(){
//Nada
}
</syntaxhighlight>
== Ejemplo 2 ==
En este ejemplo usamos la función [[breakTime()]] para descomponer el Tiempo Unix de una fecha-hora.
<syntaxhighlight lang="c++">
#include <TimeLib.h>
void setup(){
Serial.begin(115200);
time_t tiempo = 1553155200;
tmElements_t tm;
breakTime(tiempo, tm);
Serial.print(tm.Year + 1970);
Serial.print("-");
Serial.print(tm.Month);
Serial.print("-");
Serial.print(tm.Day);
Serial.print(" ");
Serial.print(tm.Hour);
Serial.print(":");
Serial.print(tm.Minute);
Serial.print(":");
Serial.print(tm.Second);
}
void loop(){
//Nada
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Libreria Time</categorytree>
== Referencias ==
[[Category:Libreria Time]]
gvrrrbatnzjqi0dx36hkns19cso5ru7
tone()
0
46
4282
4238
2019-06-11T23:29:05Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Genera en un pin una onda cuadrada de la frecuencia especificada (y ciclo de trabajo del 50%). Se puede especificar una duración, de lo contrario la onda continúa hasta una llamada a noTone().
El pin puede ser conectado a un zumbador piezoeléctrico o a un altavoz para reproducir tonos.
Sólo un tono puede ser generado a la vez. Si un tono ya se está reproduciendo en un pin diferente, la llamada a tono() no tendrá ningún efecto. Si el tono se está reproduciendo en el mismo pin, la llamada ajustará su frecuencia.
{| class="wikitable col2cen col3cen"
|+
|-
! Placa !! Frecuencia Mín. (Hz) !! Frecuencia Máx (Hz)
|-
| [[UNO]], [[MEGA]], [[Leonardo]] y otras placas AVR || 31 || 65535
|-
| [[ZERO]] || 41 || 275000
|-
| [[DUE]] y Gemma ||colspan=2|No implementado
|}
Para detalles técnicos ver las notas [https://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation#Ugly_Details Brett Hagman's].
{{Nota|Si desea reproducir tonos diferentes en varios pines, es necesario llamar [[noTone()]] en un pin antes de llamar a tone() en el siguiente pin.}}
== Sintaxis ==
<pre>
tone(pin, frecuencia);
tone(pin, frecuencia, duracion);
</pre>
== Parámetros ==
;pin: el pin en el que se quiere generar el tono
;frecuencia: la frecuencia del tono en hertz - [[unsigned int]]
;duracion: la duración del tono en milisegundos (opcional) - [[unsigned long]]
== Retornos ==
Nada.
== Advertencias ==
* El uso de la función '''tone()''' interferirá con la salida PWM en los pines 3 y 11 (en placas distintas de la [[MEGA]]).
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
int melodia[] = {262,196,196,220,196,0,247,262};
int duracion[] = {4,8,8,4,4,4,4,4};
void setup() {
for (byte n=0; n<8; n++) {
int tiempo = 1000 / duracion[n];
tone(8, melodia[n], tiempo);
int pausa = tiempo * 1.30;
delay(pausa);
noTone(8);
}
}
void loop() {
//Nada
}
</syntaxhighlight>
== Ejemplo 2 ==
Escriba un boceto para leer la entrada analógica y asigne el resultado a un rango de 100 a 1000. Almacene el resultado en una variable local llamada frecuencia. Esta será la frecuencia que toque en el altavoz. Luego use el comando de '''tono()''' para configurar la frecuencia del altavoz en el pin digital 8 durante 10 ms.
<syntaxhighlight lang="c++">
void setup() {
//Nada
}
void loop() {
int valor = analogRead(A0);
valor = map(valor, 200, 900, 100, 1000);
tone(8, frec, 10);
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Funciones tiempo</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/tone/ Guia de referencia de Arduino]
* [http://itp.nyu.edu/physcomp/labs/labs-arduino-digital-and-analog/tone-output-using-an-arduino/ Tone output] - ITP Informatica Fisica
[[Category:Funciones tiempo]]
c1ntbs0g2yuz08vslhc274sd35ygmil
true / false
0
135
4648
4647
2019-07-04T16:52:46Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Son palabras reservadas (incluso del lenguaje de programación en el que se basa Arduino: C++) que sirven como los posibles valores para crear variables del tipo [[bool]].
A diferencia de otros lenguajes, es válido utilizarlos incluso para la asignación de variables número entero; ya que equivalen (respectivamente) a 1 y 0.
'''true''' (verdadero) comunmente se define como 1, lo cual es correcto, pero '''true''' tiene una definicion mas amplia. Cualquier entero que no es cero es '''true'', en el sentido Booleano. Asi que -1, 2 y -200 son todos definidos como '''true''', tambien, en un sentido Booleano.
== Sintaxis ==
<pre>
true
false
</pre>
== Advertencias ==
* Nota que true y false se deben escribir en minusculas.
* Son sinónimos de '''false''' un 0 o la palabra reservada [[HIGH / LOW|LOW]].
* Son sinónimos de '''true''' cualquier numero distinto de 0 y la palabra reservada [[HIGH / LOW|HIGH]].
== Ejemplos ==
<syntaxhighlight lang="c++">
bool estado = true;
bool residuo = numero%5;
bool led = LOW;
</syntaxhighlight>
== Ejemplo 1 ==
Debido a que [[Print]] ("padre" de [[Stream]], y por ende de clases como [[Serial]]) no implementa una manera específica de lidiar con [[bool]], ni siquiera en el monitor serial aparecería directamente "true" o "false":
<syntaxhighlight lang="c++">
bool b = false;
Serial.println(b); // Sólo aparecerá "0"
b = true;
Serial.println(b); // Sólo aparecerá "1"
</syntaxhighlight>
== Ejemplo 2 ==
Debido a la naturaleza del tipo de dato [[bool]] se puede negar.
<syntaxhighlight lang="c++">
bool x = false;
Serial.println(x); //Sólo aparecerá "0"
Serial.println(!x); //Sólo aparecerá "1"
</syntaxhighlight>
== Ejemplo 3 ==
Nota que en el [[if... else]] no es necesario comparar.
<syntaxhighlight lang="c++">
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
if (digitalRead(LED_BUILTIN)){
digitalWrite(LED_BUILTIN, !digitalRead(13));
delay(500);
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Palabras reservadas</categorytree>
== Referencias externas ==
* [http://manueldelgadocrespo.blogspot.com/p/false.html false] - Manuel Delgado
* [http://manueldelgadocrespo.blogspot.com/p/true.html true] - Manuel Delgado
[[Category:Palabras reservadas]]
rgszjj4pdlck5qodxjgl43k6bt6k7ol
unsigned int
0
66
4841
4840
2019-07-25T00:50:32Z
Kike GL
2
/* Ejemplo */
wikitext
text/x-wiki
== Descripción ==
Es el formato numérico de 2 bytes (16 bits), son enteros comprendidos en el rango de 0 a 65,535 (2^16-1).
{{Tip|Alternativamente puede verse declarado como tipo [[word]] o '''uint16_t''', sin embargo funciona exactamente igual.}}
{{Nota|La diferencia entre enteros sin signo y enteros con signo o [[int]], radica en la forma en que se trata el bit más alto, a veces llamado bit de "signo". En el tipo entero con signo, si el bit más alto es '''1''', el número se interpreta como que es un número negativo y los otros 15 bits se interpretan como complemento matemático a 2.}}
== Sintaxis ==
<pre>
unsignet int variable [= valor];
uint16_t variable [= valor]; //En Arduino UNO
uint32_t variable [= valor]; //En Arduino DUE
size_t variable [= valor];
word variable [= valor];
variable = valorU;
</pre>
== Parametros ==
;variable: nombre de la variable a definir.
;valor: numero entre 0 y 4,294'967,295. Parámetro opcional.
;valorU: forzar tipo con subfijo '''U'''. Puedes omitir '''unsigned int''' antes del nombre de la variable.
{| class="wikitable col2cen"
|+Posibles formateadores
!Base!!Subfijo!!Ejemplo
|-
|[[unsigned int]]||U||n = 123U
|-
|[[long]]||L||n = 123L
|-
|[[unsigned long]]||UL||n = 123UL
|-
|[[float]]||F||n =12.3F
|}
{| class="wikitable col2cen"
|+Posibles formateadores
!Base!!Prefijo!!Comentario!!Ejemplo
|-
|DEC||ninguno||Dígitos 0~9||123
|-
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
|-
|OCT||0||digitos 0~7||0173
|-
|BIN||B||0 o 1||B1110011
|}
== Comentarios ==
* Si sumas 1 al valor maximo que de 4,294,967,295 pasa a 0.
* Si restas 1 al valor minimo que de 0 pasa a 4,294,967,295.
== Advertencias ==
* En Arduino [[UNO]] y otras placas basadas en el ATmega, los '''unsigned int''' almacenan un numero de 2 bytes (16 bit), con un rango de entre 0 y 32,065 (2^16 - 1). Alternativamente puede verse declarado como tipo '''uint16_t''' o [[word]].
* En Arduino [[DUE]] y [[Zero]], los '''unsigned int''' almacenan un numero de 4 bytes (32 bit), con un rango de 0 a 4,294,967,295 (2^32 - 1). Alternativamente puede verse declarado como tipo '''uint32_t'''.
== Ejemplo ==
<syntaxhighlight lang="c++">
unsigned int x = 12345;
x = 12345U; //Con "U" forzamos unsigned int
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tipo dato</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Tipo dato]]
tg48klfzokl2x9gpgezx1c77c78juer
unsigned long
0
67
3680
3679
2019-05-06T18:40:56Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Es como el tipo de dato [[long]] para almacenar 4 byte (32 bits), pero sin signo es decir no almacena números negativos, teniendo un rango desde 0 a 4,294,967,295 (2^32-1). Alternativamente puede verse declarado como tipo '''uint32_t''', sin embargo funciona exactamente igual.
{{Nota|Tenga cuidado al hacer operaciones con numeros enteros ya que si no lo especificas explisitamente, Arduino asume que quieres trabajar con [[int]]. Ver Ejemplo 1.}}
== Sintaxis ==
<pre>
unsigned long variable [= valor];
uit32_t variable [= valor];
variable = valorUL;
</pre>
== Parámetros ==
;variable: El nombre de variable a definir.
;valor: Valor que asignamos a la variable en el rango entre 0~4,294,967,295. Parámetro opcional.
;valorUL: Forzar con subfijo '''UL'''. Puedes omitir la palabra '''unsigned long''' antes del nombre de la variable.
;uit32_t: sinonimo de '''unsigned long'''.
{| class="wikitable col2cen"
|+Posibles formateadores
!Base!!Subfijo!!Ejemplo
|-
|[[unsigned int]]||U||n = 123U
|-
|[[long]]||L||n = 123L
|-
|[[unsigned long]]||UL||n = 123UL
|-
|[[float]]||F||n =12.3F
|}
{| class="wikitable col2cen"
|+Posibles formateadores
!Base!!Prefijo!!Comentario!!Ejemplo
|-
|DEC||ninguno||Dígitos 0~9||123
|-
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
|-
|OCT||0||digitos 0~7||0173
|-
|BIN||B||0 o 1||B1110011
|}
== Advertencias ==
* Si sumas 1 al valor maximo que de 4,294,967,295 pasa a 0.
* Si restas 1 al valor minimo que de 0 pasa a 4,294,967,295.
== Ejemplo 1 ==
Los números 60 y 24 son interpretados como [[int]] por Arduino que soporta maximo de 32,767 de modo que 86,400 no entra.
<syntaxhighlight lang="c++">
unsigned long segundos = 60 * 60 * 24; //Error
unsigned long segundos = 60UL * 60 * 24; //Ok
</syntaxhighlight>
== Ejemplo 2 ==
Hacer parpadear el LED a bordo sin usar [[delay()]].
<syntaxhighlight lang="c++">
unsigned long hora=0;
void setup(){
pinMode(LED_BUITIN, OUTPUT);
}
void loop(){
if (millis() - hora > 500){
hora = millis();
digitalWrite(LED_BUITIN, !digitalRead(LED_BUITIN));
}
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tipo dato</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Tipo dato]]
t8jdi7yu5leykjsb66414pko01otwn6
variable local
0
458
5223
5222
2020-02-02T18:31:26Z
Kike GL
2
/* Referencias externas */
wikitext
text/x-wiki
== Descripcion ==
Una variable local es la que es creada dentro de una funcion y solo puede ser usada en dicha funcion, no existindo fuera de este ambito.
Normalmente, los valores se tratan como enteros int en base 10 (decimales), pero se puede usar notación especial (formateadores) para ingresar valores de otro tipo (subfijos) y en otras bases (prefijos).
== Sintaxis ==
<pre>
void funcion(){
[tipo] variable [= valor];
}
</pre>
== Parámetros ==
;funcion:funcion donde esta disponible esta variable local.
;tipo: define el tipo de variable. [[char]], [[byte]], [[int]], [[long]], [[float]], etc de manera explicita o puede usar un subfijo en '''valor'''
{| class="wikitable col2cen"
|+Subfijos
!Tipo!!Subfijo!!Ejemplo
|-
|[[int]]||ninguno||123
|-
|[[unsigned int]]||U||123U
|-
|[[long]]||L||123L
|-
|[[unsigned long]]||UL||123UL
|-
|[[float]]||F||1.23F
|}
;variable:nombre de la variable.
;valor:valor a almacenar en el rango del tipo de dato. Puedes especificar la '''base''' del dato con un prefijo.
{| class="wikitable col2cen"
|+Prefijos
!Base!!Prefijo!!Comentario!!Ejemplo
|-
|DEC||ninguno||Dígitos 0~9||123
|-
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
|-
|OCT||0||digitos 0~7||0173
|-
|BIN||B||0 o 1||B1110011
|}
== Comentarios ==
* Todas las variables son almacenadas en [[SRAM]] salvo [[const]].
== Advertencias ==
La variable local solo existe dentro de la funcion donde fue declarada.
== Ejemplo 1 ==
Conmuta el LED a bordo cuando se pulsa botón. Conectar pulsador entre pin 7 y GND.
<syntaxhighlight lang="c++">
volatile bool estado = LOW;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(7, INPUT_PULLUP);
attachInterrupt(0, cambia, CHANGE);
}
void cambia(){
estado = !estado;
}
void loop(){
digitalWrite(LED_BUILTIN, estado);
}
</syntaxhighlight>
PD: LOW, LED_BUILTIN, OUTPUT, INPUT_PULLUP y CHANGE son [[Palabras reservadas]].
== Vea también ==
* [[variable publica]]
* [[matriz]]
* [[const]]
* [[static]]
* [[volatile]]
* [[extern]]
* [[define|#define]]
* [[Comentarios]] - (//)
* [[Palabras reservadas]]
== Referencias externas ==
* [https://www.prometec.net/intro-programacion/ Introduccion a la programacion] - Prometec
[[Category:Variables]]
td3w9t6smihw0k8ncaqueprzxbauq4c
variable publica
0
459
5218
5211
2020-02-02T05:09:59Z
Kike GL
2
/* Parámetros */
wikitext
text/x-wiki
== Descripción ==
Una variable '''publica''' es la que esta disponible en cualquier parte del [[boceto]].
Normalmente, los valores se tratan como enteros [[int]] en base 10 (decimales), pero se puede usar notación especial (formateadores) para ingresar valores de otro tipo (subfijos) y en otras bases (prefijos).
== Sintaxis ==
<pre>
[tipo] variable [= valor];
</pre>
== Parámetros ==
;tipo: define el tipo de variable. [[char]], [[byte]], [[int]], [[long]], [[float]], etc de forma explicita o usar un subfijo.
{| class="wikitable col2cen"
|+Subfijos
!Tipo!!Subfijo!!Ejemplo
|-
|[[int]]||ninguno||123
|-
|[[unsigned int]]||U||123U
|-
|[[long]]||L||123L
|-
|[[unsigned long]]||UL||123UL
|-
|[[float]]||F||1.23F
|}
;variable:nombre de la variable.
;valor:valor a almacenar en el rango del tipo de dato. Puede especificar la '''base''' del dato usando un prefijo.
{| class="wikitable col2cen"
|+Prefijos
!Base!!Prefijo!!Comentario!!Ejemplo
|-
|DEC||ninguno||Dígitos 0~9||123
|-
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
|-
|OCT||0||digitos 0~7||0173
|-
|BIN||B||0 o 1||B1110011
|}
== Comentarios ==
* Todas las variables son almacenadas en [[SRAM]] salvo [[const]].
== Advertencias ==
Para que una variable sea publica debe estar declarada fuera de cualquier funcion.
== Ejemplo ==
Conmuta el LED a bordo cuando se pulsa botón. Conectar pulsador entre pin 7 y GND.
<syntaxhighlight lang="c++">
bool estado = LOW; //Variable publica
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(7, INPUT_PULLUP);
attachInterrupt(0, cambia, CHANGE);
}
void cambia(){
estado = !estado;
}
void loop(){
digitalWrite(LED_BUILTIN, estado);
}
</syntaxhighlight>
PD: LOW, LED_BUILTIN, OUTPUT, INPUT_PULLUP y CHANGE son [[Palabras reservadas]].
== Vea también ==
* [[variable local]]
* [[matriz]]
* [[static]]
* [[const]]
* [[volatile]]
* [[extern]]
* [[define|#define]]
* [[Palabras reservadas]]
* [[Comentarios]] - (//)
== Referencias externas ==
[[Category:Variables]]
l734gq1mpdxyt9j0vgu8o8ndwg9vtly
void
0
69
5228
5227
2020-02-02T18:36:58Z
Kike GL
2
/* Descripción */
wikitext
text/x-wiki
== Descripción ==
Este tipo no representa dato alguno, sino que es una palabra reservada usada para indicar alguna de las siguientes:
* Declarar una función de manera que no se espere ningún dato en su retorno.
* Indicar explícitamente que una función no requiere parámetros.
* Como tipo de puntero en el parámetro de una función, para indicar que en realidad acepta un puntero de cualquier tipo (aunque para hacer uso de este, primero se debe reinterpretar al tipo que sea necesario).
{{Tip|Reservado para la declaración de funciones sin valor de retorno.}}
== Sintaxis ==
<pre>
void funcion(){};
void funcion(void){};
void funcion(void* puntero){};
</pre>
== Advertencias ==
Con los '''void*''' hay que tener cuidado; debido a que, si acepta de cualquier tipo y accidentalmente se inserta un puntero a un objeto, este último podría acabar corrompido.
== Ejemplo ==
<syntaxhighlight lang="c++">
void setup(){
//Se ejecuta una sola vez
}
void loop(){
//Se ejecuta muchas veces
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tipo dato</categorytree>
* [[setup()]]
* [[loop()]]
* [[return]]
== Referencias externas==
* [https://www.prometec.net/intro-programacion/ Introduccion a la programacion] - Prometec
[[Category:Tipo dato]]
ds8hpebku93azfjmfi5q05ydhrj7kys
volatile
0
202
5202
5172
2020-02-02T04:31:51Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Palabra clave conocida como '''calificadora'''. Se usa antes del tipo de datos de una variable, para modificar la manera en que el compilador y el [[boceto]] deben tratar dicha variable.
La declaración de una variable '''volatile''' es una directiva del compilador. El compilador es un software que traduce el código Arduino en el código de máquina, que son las instrucciones reales para el chip ATmel en el Arduino.
Específicamente, el compilador carga la variable de [[SRAM]] y no de un registro de almacenamiento, que es una ubicación de memoria temporal donde se almacenan y manipulan las variables del programa. Bajo ciertas condiciones, el valor de una variable almacenada en los registros puede ser inexacto.
{{Nota|Una variable debe ser declarada '''volatile''' cada vez que su valor pueda ser cambiado por algo más allá del control de la sección de código en la que aparece, como otro código que se ejecuta simultáneamente.}}
En Arduino, el único lugar que es probable que esto ocurra es en secciones de código asociadas a las interrupciones, que llaman a una rutina de servicio de interrupción.
== Sintaxis ==
<pre>
volatil [tipo] variable [= valor];
</pre>
== Parámetros ==
;tipo: define el tipo de variable. [[char]], [[byte]], [[int]], [[long]], [[float]], etc de manera explicita o puede usar un subfijo en valor.
{| class="wikitable col2cen"
|+Subfijos
!Tipo!!Subfijo!!Ejemplo
|-
|[[int]]||ninguno||123
|-
|[[unsigned int]]||U||123U
|-
|[[long]]||L||123L
|-
|[[unsigned long]]||UL||123UL
|-
|[[float]]||F||1.23F
|}
;variable:nombre de la variable.
;valor:valor a almacenar en el rango del tipo de dato indicando la '''base''' del dato como prefijo.
{| class="wikitable col2cen"
|+Prefijos
!Base!!Prefijo!!Comentario!!Ejemplo
|-
|DEC||ninguno||Dígitos 0~9||123
|-
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
|-
|OCT||0||digitos 0~7||0173
|-
|BIN||B||0 o 1||B1110011
|}
== Advertencias ==
Nada.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
volatile n = 123 //int
volatile n = 123U //unsigned int
volatile n = 123L //long
volatile n = 123UL //unsigned long
volatile n = 1.23F //float
volatile byte n = 123;
volatile byte n = B1110011;
volatile byte n = 0173;
volatile byte n = 0x7B;
</syntaxhighlight>
== Ejemplo 2 ==
Conmuta el LED a bordo cuando se pulsa botón. Conectar pulsador entre pin 7 y GND.
<syntaxhighlight lang="c++">
volatile bool estado = LOW;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(7, INPUT_PULLUP);
attachInterrupt(0, cambia, CHANGE);
}
void cambia(){
estado = !estado;
}
void loop(){
digitalWrite(LED_BUILTIN, estado);
}
</syntaxhighlight>
== Vea también ==
* [[variable publica]]
* [[variable local]]
* [[matriz]]
* [[static]]
* [[const]]
* [[extern]]
* [[define|#define]]
* [[Palabras reservadas]]
* [[Comentarios]] - <nowiki>(//)</nowiki>
== Referencias ==
* [http://www.cplusplus.com/doc/tutorial/constants/ cplusplus]
[[Category:Variables]]
c23w3om4lits71zus2c5fur697gvnqv
while
0
61
5259
4360
2020-02-04T13:21:39Z
Kike GL
2
/* Parámetros */
wikitext
text/x-wiki
== Descripción ==
Los bucles '''while''' se ejecutan de forma continua, e infinitamente, hasta que la expresión dentro del paréntesis () se convierte en falsa o se llegue a una sentencia [[break]]. Algo debe cambiar la variable de prueba, o el bucle '''while''' nunca se terminará. Este cambio podría ser en el código, tal como que una variable sea incrementada, o una condición externa, tal como la comprobación de un sensor.
== Sintaxis ==
<pre>
while (expresion){
//ejecutar
}
</pre>
== Parámetros ==
;expresion: una instrucción (boolean) que se evalúa como verdadera o falsa.
== Advertencias ==
Nada.
== Ejemplo ==
<syntaxhighlight lang="c++">
byte var = 0;
while (var < 200){
//repite algo 200 veces
var++;
}
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Estructura control</categorytree>
== Referencias externas ==
* [http://arduino.cc/en/Reference/While Guia de referencia de Arduino]
* [https://aprendiendoarduino.wordpress.com/tag/estructuras-de-control/ Estructuras de control] - Enrique Crespo
* [http://www.ardumania.es/el-bucle-while/ El bucle while] - Manuel Delgado
[[Category:Estructura control]]
ezgn944f7xjcggxkid8rcupramgy3ok
word
0
71
4521
3684
2019-06-25T21:39:17Z
Kike GL
2
/* Descripción */
wikitext
text/x-wiki
== Descripción ==
'''word''' (palabra) almacena un número entero de 2 bytes (16 bits) sin signo; en otras palabras, comprende el rango de 0 a 65,535 (2^16-1).
{{Tip|Alternativamente puede verse declarado como tipo [[unsigned int]] o '''uint16_t''', sin embargo funciona exactamente igual.}}
{{Nota|* '''word''' es prácticamente el tipo de dato universal para declarar variables de 2 bytes (16 bits); ya que, independientemente de la arquitectura del uC, siempre será de dicho tamaño.}}
== Sintaxis ==
<pre>
word variable [= valor];
uint16_t variable [= valor];
unsigned int variable [= valor];
variable = valorU;
</pre>
== Parámetros ==
;uint16_t:Sinonimo de '''word''' y [[unsigned int]].
;variable:nombre de la variable.
;Valor:Valor a asignar entre 0 y 65,535. Parámetro opcional.
;valorU: Forzar valor de este tipo de dato. Puedes omitir el tipo.
{| class="wikitable col2cen"
|+Posibles formateadores
!Base!!Prefijo!!Comentario!!Ejemplo
|-
|DEC||ninguno||Dígitos 0~9||123
|-
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
|-
|OCT||0||digitos 0~7||0173
|-
|BIN||B||0 o 1||B1111011
|}
== Comentario ==
Para [[UNO]] '''word''' es lo mismo que [[unsigned int]] y se prefiere este ultimo.
== Advertencias ==
* En Arduino [[UNO]] y otras placas ATmega, '''word''' es equivalente a [[unsigned int]] porque ambos son de 2 bytes (16 bit).
* En Arduino [[DUE]] y [[Zero]], '''word''' de 4 bytes (32 bit) por lo que es diferente a [[unsigned int]] que es 2 bytes (16 bits).
== Ejemplo ==
El valor está expresado en hexadecimal, equivale a 32,768 (es justamente la mitad entera más uno de 65,535).
<syntaxhighlight lang="c++">
word x = 0x8000; //32768
uint16_t x = 32768;
x = 32768U;
</syntaxhighlight>
== Vea también ==
<categorytree mode=all>Tipo dato</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Tipo dato]]
n59ffawxvakqmmutnwxybaficccysfk
word()
0
181
4309
4230
2019-06-11T23:46:31Z
Kike GL
2
/* Vea también */
wikitext
text/x-wiki
== Descripción ==
Convierte un valor de cualquier tipo a un dato tipo [[word]] o [[unsigned int]].
== Sintaxis ==
<pre>
word(variable);
word(h,l);
</pre>
== Parámetros ==
;variable:Variable a convertir de cualquier tipo.
;h:El byte más significativo (más a la izquierda) de la variable.
;l:El byte menos significativo (más a la derecha) de la variable.
== Retorna ==
Retorna un [[word]] o [[unsigned int]].
== Advertencias ==
* El tipo [[word]] es prácticamente el tipo de dato universal para declarar variables de 2 bytes (16 bits); ya que, independientemente de la arquitectura del uC, siempre será de dicho tamaño.
* En Arduino [[UNO]] los tipod [[word]] y [[unsigned int]] sólo aplica en placas basadas en el ATmega
* En Arduino [[DUE]] y [[Zero]], [[unsigned int]] almacena un número sin signo de 4 bytes (32 bit).
* No funciona con cadenas [[string]] ni objetos [[String]].
== Ejemplo ==
<pre>
</pre>
== Vea también ==
<categorytree mode=all>Funciones conversion</categorytree>
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
[[Category:Funciones conversion]]
gmyevh2mo2yl6p1eaaf1yi1m1w9wnly
xor
0
209
5298
5290
2020-06-06T21:40:47Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Es un operador boleano '''xor''' <nowiki>^</nowiki> que permite unir dos expresiones lógicamente.
{| class="wikitable col3cen"
!a!!b!!a <nowiki>^</nowiki> b
|-
|0||0||0
|-
|1||0||1
|-
|0||1||1
|-
|1||1||0
|}
== Sintaxis ==
<pre>
espresion 1 ^ expresion 2
espresion 1 xor expresion 2
</pre>
== Retorna ==
Verdadero o falso.
== Advertencias ==
* No confundir el operador boleano '''xor''' <nowiki>^</nowiki>, con el operador [[xor bit a bit]] <nowiki>|</nowiki>.
== Ejemplo ==
<pre>
</pre>
== Vea también ==
<categorytree mode=all>Operador logico</categorytree>
<categorytree mode=all>Operador bit a bit</categorytree>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [https://programarfacil.com/blog/programacion/la-logica-en-la-programacion/ La lógica en la programacion] - Luis Del Valle
* [https://aprendiendoarduino.wordpress.com/category/operadores/ Operadores] - Aprendiendo Arduino
[[Category:Operador logico]]
a2ijxdodat14jto9smj9b9ye2ax1frx
xor bit a bit
0
210
4988
4975
2019-09-26T23:29:04Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
Es un operador '''xor bit a bit''' <nowiki>^</nowiki> (or exclusivo) que establece (pone en 1) un bit sí y solo si el bit de esa posición está establecido (en 1) únicamente en uno de los operandos.
{| class="wikitable col3cen"
!a!!b!!a <nowiki>^</nowiki> b
|-
|0||0||0
|-
|1||0||1
|-
|0||1||1
|-
|1||1||0
|}
== Sintaxis ==
<pre>
variable1 ^ variable2
</pre>
;variable1: primer operando, es la variable (de cualquier tipo) a modificar.
;variable2: segundo operando, es quien va a relizar las modificaciones pertinentes.
== Retorna ==
El valor resultante, donde cada bit es invertido si así lo dicta el segundo operando.
== Advertencias ==
* No confundir el operador '''xor bit a bit''' <nowiki>^</nowiki>, con el operador boleano [[xor]] <nowiki>x</nowiki>.
== Comentario ==
* Este operador se usa a menudo para invertir cada bites (es decir si cambio de 0 a 1, o de 1 a 0) algunos de los bits en una expresión entera. '''¡Es como un [[not bit a bit]] pero con la posibilidad de ser parcial!'''
* En una operación OR si hay un 1 en el bit de máscara, el bit se invierte; si hay un 0, el bit se mantiene igual.
== Ejemplo 1 ==
<syntaxhighlight lang="c++">
byte a = B1100;
byte b = B1010;
a ^ b; //0110
</syntaxhighlight>
== Ejemplo 2 ==
<syntaxhighlight lang="c++">
byte b = 55;
b ^= b; // Así es como en lenguaje máquina se reestablece una variable a cero
b = 55;
b ^= ~b; // Así es como en lenguaje máquina se reestablece una variable a su máximo valor (-1 si es con signo)
</syntaxhighlight>
== Ejemplo 3 ==
Parpadea el LED a bordo.
<syntaxhighlight lang="c++">
void setup () {
DDRB = DDRB | 32; //Configura el pin digital 13 como OUTPUT, no altera el resto. 32=B00100000;
}
void loop () {
PORTB = PORTB ^ 32; //Invertido estado del bit 5 (pin digital 13), no altera el resto.
delay(500);
}
</syntaxhighlight>
== Vea también ==
* [[not]] <nowiki>(!)</nowiki>
* [[and]] <nowiki>(&&)</nowiki>
* [[or]] <nowiki>(||)</nowiki>
* [[xor]] <nowiki>(^)</nowiki>
* [[not bit a bit]] <nowiki>(~)</nowiki>
* [[and bit a bit]] <nowiki>(&)</nowiki>
* [[or bit a bit]] <nowiki>(|)</nowiki>
* [[bitshift right]] <nowiki>(>>)</nowiki>
* [[bitshift left]] <nowiki>(<<)</nowiki>
<categorytree mode=all>Funciones bit y byte</categorytree>
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
* [http://manueldelgadocrespo.blogspot.com/p/xor-bit-bit.html XOR bit a bit] - Manuel Delgado Crespo
* [https://playground.arduino.cc/Code/BitMath/#bitwise_xor Bitwise XOR] - Playground
[[Category:Operador bit a bit]]
bdi2rri9g22v619epjcgznaoerdey3u
xor bit a bit compuesto
0
381
5024
5016
2019-09-27T00:09:59Z
Kike GL
2
/* Referencias */
wikitext
text/x-wiki
== Descripción ==
El operador '''xor bit a bit compuesto''' <nowiki>(^=)</nowiki> se usa a menudo para invertir (toggle) determinados bits en una variable.
{| class="wikitable col3cen"
!a!!b!!a <nowiki>^=</nowiki> b
|-
|0||0||0
|-
|1||0||1
|-
|0||1||1
|-
|1||1||0
|}
{{Nota|A menudo se hace referencia en las guías de programación como "invertido" (TOGLE) de bits.}}
== Sintaxis ==
<pre>
variable ^= mascara;
variable = variable ^ mascara;
</pre>
== Parametros ==
;variable: Nombre de la variable sobre la cual operar. Puede ser: [[char]], [[byte]], [[int]] o [[long]].
;mascara: Constante entera puede ser [[char]], [[byte]], [[int]] o [[long]].
== Retorno ==
* Los bits tratados con 0, mantienen su estado.
* Los bits tratados con 1, cambian su estado.
== Comentario ==
Debido a que se trata de bits de un operador de bits - es conveniente usar el formateador binario con constantes. Las cifras siguen siendo el mismo valor en otras representaciones, que simplemente no son tan fáciles de entender. Además, B00000000 se muestra por claridad, pero cero en cualquier formato de número es cero.
== Advertencia ==
Nada.
== Ejemplo 1 ==
Para conmutar los 2 bits menos significativos de una variable, dejando el resto de la variable sin cambios, se use el operador '''xor bit a bit compuesto''' (^=) con la constante B00000011.
<syntaxhighlight lang="c++">
byte a = B10101010;
a ^= B00000011; //B10101001
</syntaxhighlight>
== Vea también ==
* [[incremento]] <nowiki>(++)</nowiki>
* [[decremento]] <nowiki>(--)</nowiki>
* [[suma compuesta]] <nowiki>(+=)</nowiki>
* [[resta compuesta]] <nowiki>(-=)</nowiki>
* [[multiplicacion compuesta]] <nowiki>(*=)</nowiki>
* [[division compuesta]] <nowiki>(/=)</nowiki>
* [[modulo compuesto]] <nowiki>(%=)</nowiki>
* [[or bit a bit compuesto]] <nowiki>(|=)</nowiki>
* [[and bit a bit compuesto]] <nowiki>(&=)</nowiki>
== Referencias externas ==
[[Category:Operador bit a bit compuesto]]
0opbyb016mm00pvwmcg77rpm4gd6gdc
Discusión:Entusiastas
1
112
1511
1464
2018-07-04T15:25:27Z
Kike GL
2
wikitext
text/x-wiki
Por si tienen dudas sobre la edición [https://www.mediawiki.org/wiki/Help:Formatting/es consultar aquí], saludos, --[[Usuario:Kike GL|Kike GL]] ([[Usuario discusión:Kike GL|discusión]]) 12:13 18 jun 2018 (EDT)
Pretendemos superar con creces la Guia de Referencia de Arduino '''oficial''' por eso:
# Cada articulo deberá contener '''como minimo''' la traducción de la Guía en ingles
# Luego esta pequeña comunidad deberá mejorar el texto (simple pero claro), poner parametros, retorno, advertencias y comentarios pertinentes.
# Es muy importante poner ejemplos desde los mas simples y obvios hasta los mas rebuscados usos del comando.
# Hacer referencia a comandos pertinentes o librerías que puedan ayudar.
# Poner referencias externas. Esto orienta a quien quiere investigar mas sobre dicho tema.
Recuerden '''nunca''' terminaremos este Wiki, siempre hay cosas nuevas o mejoras, --[[Usuario:Kike GL|Kike GL]] ([[Usuario discusión:Kike GL|discusión]]) 14:00 3 jul 2018 (EDT)
sbb7z9hva7r1xrwousylrfs9qssxcef
Discusión:Página principal
1
108
257
2018-06-17T02:35:34Z
Kike GL
2
Página creada con «Hola a todo: Se que la elección de colores quizás no sea la mas afortunada, pero entiendo que lo importante es la legibilidad. Espero sus comentario, saludos --~~~~»
wikitext
text/x-wiki
Hola a todo: Se que la elección de colores quizás no sea la mas afortunada, pero entiendo que lo importante es la legibilidad. Espero sus comentario, saludos --[[Usuario:Kike GL|Kike GL]] ([[Usuario discusión:Kike GL|discusión]]) 22:35 16 jun 2018 (EDT)
75a3bmchuqo5zk1h087axnqjwug3h5m
Discusión:Serial
1
286
1170
2018-06-28T16:11:16Z
Kike GL
2
Página creada con «Creo que cada método debería ser tener su propia pagina o esta sera muy grande. --~~~~»
wikitext
text/x-wiki
Creo que cada método debería ser tener su propia pagina o esta sera muy grande. --[[Usuario:Kike GL|Kike GL]] ([[Usuario discusión:Kike GL|discusión]]) 12:11 28 jun 2018 (EDT)
4yjz5owepg3xz3ktwy7h2g2zp2j0yyf
Discusión:Variables
1
220
944
943
2018-06-26T14:31:02Z
Kike GL
2
wikitext
text/x-wiki
Falta mencionar cuando se destruye o libera el espacio reservado para una variable. --[[Usuario:Kike GL|Kike GL]] ([[Usuario discusión:Kike GL|discusión]]) 10:29 26 jun 2018 (EDT)
fjdxmcvgeekg3ch9i8nfpn5r7abhe0f
Discusión:char
1
164
612
611
2018-06-22T14:48:47Z
Kike GL
2
Página blanqueada
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1
Usuario:AlexLPD
2
306
1463
1462
2018-07-03T17:51:56Z
Kike GL
2
wikitext
text/x-wiki
{| class="wikitable"
|Descripción||Soy de México, Ingeniero Industrial, siempre amo la electrónica y sé ... ¡¡Usar Arduino para aprender nuevas formas de mejorar el mundo !!. Soldador, maquinista, soñador y creador. Bebo tequila pero no café.
|-
|Vive en||Michoacan - Mexico GMT-5
|-
|Website||???
|-
|Contactar en||[https://forum.arduino.cc/index.php?topic=542577.0 Foro Arduino en español]
|}
77nh1a60u30yxb7y6vek1p78wwnfyzu
Usuario:Jopapa
2
109
278
276
2018-06-18T15:49:11Z
Kike GL
2
wikitext
text/x-wiki
{| class="wikitable"
|Descripción||???
|-
|Vive en||Alicante-España (GMT+2)
|-
|Website||[http://www.jopapa.me/ Cosas Arduino, esp8266 y más]
|-
|Contactar en||[https://forum.arduino.cc/index.php?topic=542577.0 Foro Arduino en español]
|}
fx395utboazezegs8ykjiyks41xcqu1
Usuario:Kike GL
2
64
594
310
2018-06-21T22:50:21Z
Kike GL
2
wikitext
text/x-wiki
{| class="wikitable"
|Descripción||Ingeniero electrónico con especialidad en electrónica digital y controles industriales.
|-
|Vive en||Lima, Perú. GMT-5
|-
|Website||[http://arduino.perut.org Apuntes de Arduino]
|-
|Contactar en||[https://forum.arduino.cc/index.php?topic=542577.0 Foro Arduino en español]
|}
<categorytree mode="pages">Referencias</categorytree>
<categorytree mode="pages">Librerias</categorytree>
<categorytree mode="pages">Ejemplos</categorytree>
Si necesitas ayuda con la edicion en MediWiki [https://m.mediawiki.org/wiki/Help:Contents/es consulta aqui]
a84mwed9d5kg0rg6a8rjq12b4rijcbd
Usuario:Lucario448
2
107
279
256
2018-06-18T15:51:15Z
Kike GL
2
wikitext
text/x-wiki
{| class="wikitable"
|Descripción||???
|-
|Vive en||Costa Rica (GMT-6)
|-
|Website||???
|-
|Contactar en||[https://forum.arduino.cc/index.php?topic=542577.0 Foro Arduino en español]
|}
ohkv9ej5rx3m7dpprzaw4l92ei3950k
Usuario:Noter
2
115
296
2018-06-18T17:07:19Z
Kike GL
2
Página creada con «{| class="wikitable" |Descripción||??? |- |Vive en||Palencia, España (GMT+2) |- |Website||??? |- |Contactar en||[https://forum.arduino.cc/index.php?topic=542577.0 Foro Ar...»
wikitext
text/x-wiki
{| class="wikitable"
|Descripción||???
|-
|Vive en||Palencia, España (GMT+2)
|-
|Website||???
|-
|Contactar en||[https://forum.arduino.cc/index.php?topic=542577.0 Foro Arduino en español]
|}
amyk099kom8lno68xzsoscnb4oknkvq
Usuario:Swift
2
374
2107
2106
2018-07-18T20:24:56Z
Kike GL
2
wikitext
text/x-wiki
{| class="wikitable"
|Descripción||Estudiante de Electrónica y Telecomunicaciones
|-
|Vive en||Ecuador GSM-6
|-
|Website||???
|-
|Contactar en||[https://forum.arduino.cc/index.php?topic=542577.0 Foro Arduino en español]
|}
s9meyz0abjbtfo4wraqsvdebbiktass
Usuario:Tauro0221
2
305
1425
2018-07-02T23:41:41Z
Kike GL
2
Página creada con «{| class="wikitable" |Descripción||??? |- |Vive en||??? |- |Website||??? |- |Contactar en||[https://forum.arduino.cc/index.php?topic=542577.0 Foro Arduino en español] |}»
wikitext
text/x-wiki
{| class="wikitable"
|Descripción||???
|-
|Vive en||???
|-
|Website||???
|-
|Contactar en||[https://forum.arduino.cc/index.php?topic=542577.0 Foro Arduino en español]
|}
5g7dub10f7hw5utz3yq9869g4742sj7
Usuario discusión:Jopapa
3
110
280
2018-06-18T15:52:45Z
Kike GL
2
Página creada con «Bienvenido Jopapa, cual quieres que sea la estructura de la sección Librerías ? saludos, --~~~~»
wikitext
text/x-wiki
Bienvenido Jopapa, cual quieres que sea la estructura de la sección Librerías ? saludos, --[[Usuario:Kike GL|Kike GL]] ([[Usuario discusión:Kike GL|discusión]]) 11:52 18 jun 2018 (EDT)
1xs3uo1camb8awwhahecn26d3uz640u
Usuario discusión:Kike GL
3
113
284
2018-06-18T16:15:26Z
Jopapa
4
Estructura librerias
wikitext
text/x-wiki
Supongo que la estructura será tal como esta en la página en ingles (https://playground.arduino.cc/Main/LibraryList#MotionControl). Dividido por categorias, dada la gran cantidad de librerias.
Lo que no se es como se crea esa estructura, si tienes que ser tu y yo ir añadiendo entradas.
bn6p0945gywrmmr21ejd5jrqh43jet1
ArduWiki:Acerca de
4
12
56
2018-06-13T17:39:59Z
Kike GL
1
Página creada con «Arduino es hardware libre. Este es un wiki para ayudar a los novatos en este mundo.»
wikitext
text/x-wiki
Arduino es hardware libre. Este es un wiki para ayudar a los novatos en este mundo.
4frxufasjw92tckw647f5cie47zz4cs
ArduWiki:Derechos de autor
4
85
218
217
2018-06-16T18:40:40Z
Kike GL
2
wikitext
text/x-wiki
Este wiki pretende llenar un vacío generado por la [https://www.arduino.cc/reference/es/ Guía de Referencia Arduino].
Pensamos que un proyecto comunitario como este puede aportar mucho como una verdadera guía, con ejemplos, notas y advertencias que provienen de la experiencia de sus editores.
{{Nota|Si te identificas con esta idea y eres al menos '''Full Member''' en el foro de Arduino es Español crear una cuenta en este wiki y luego solicita tu promoción a '''editor''' así podrás contribuir.}}
Si ya eres usuario registrado tienes la opción de agregar comentarios en las paginas de discusión para que un editor las considere.
Todo este texto es de '''dominio publico'''.
Puedes leer tamien: [https://creativecommons.org/publicdomain/zero/1.0/ Creative Commons Zero (dominio público)]
Atentamente,
El equipo de editores.
56rlpd1te8yb4mp0szku22szg3xd8m1
MediaWiki:Vector.css
8
21
824
823
2018-06-25T18:48:32Z
Administrador
1
css
text/css
/* El CSS colocado en esta página afectará a los usuarios que usen la apariencia "Vector" */
body{
text-align: justify;
}
pre{
background: Thistle;
text: Purple;
border: 1px solid Purple;
Border-Radius: 8px;
}
/** Estilos para tablas.
la idea es, si se quiere que la primera columna de la tabla esté alineada
a la derecha, la segunda centrada y la tercera a la izquierda, usar
{| class="col1der col2cen col3izq"
en vez de repetir "style='text-align:right'", etc, en '''cada''' celda
Esto sólo se usa en Medallero. Debería divulgarse para aprovecharlo en más lugares
**/
.col1der TD:first-child {text-align:right}
.col1izq TD:first-child {text-align:left}
.col1cen TD:first-child {text-align:center}
.col2der TD:first-child + TD {text-align:right}
.col2izq TD:first-child + TD {text-align:left}
.col2cen TD:first-child + TD {text-align:center}
.col3der TD:first-child + TD + TD {text-align:right}
.col3izq TD:first-child + TD + TD {text-align:left}
.col3cen TD:first-child + TD + TD {text-align:center}
.col4der TD:first-child + TD + TD + TD {text-align:right}
.col4izq TD:first-child + TD + TD + TD {text-align:left}
.col4cen TD:first-child + TD + TD + TD {text-align:center}
.col5der TD:first-child + TD + TD + TD + TD {text-align:right}
.col5izq TD:first-child + TD + TD + TD + TD {text-align:left}
.col5cen TD:first-child + TD + TD + TD + TD {text-align:center}
.col6der TD:first-child + TD + TD + TD + TD + TD {text-align:right}
.col6izq TD:first-child + TD + TD + TD + TD + TD {text-align:left}
.col6cen TD:first-child + TD + TD + TD + TD + TD {text-align:center}
.col7der TD:first-child + TD + TD + TD + TD + TD + TD {text-align:right}
.col7izq TD:first-child + TD + TD + TD + TD + TD + TD {text-align:left}
.col7cen TD:first-child + TD + TD + TD + TD + TD + TD {text-align:center}
.col8der TD:first-child + TD + TD + TD + TD + TD + TD + TD {text-align:right}
.col8izq TD:first-child + TD + TD + TD + TD + TD + TD + TD {text-align:left}
.col8cen TD:first-child + TD + TD + TD + TD + TD + TD + TD {text-align:center}
.col9der TD:first-child + TD + TD + TD + TD + TD + TD + TD + TD {text-align:right}
.col9izq TD:first-child + TD + TD + TD + TD + TD + TD + TD + TD {text-align:left}
.col9cen TD:first-child + TD + TD + TD + TD + TD + TD + TD + TD {text-align:center}
esqt0bx6yxr44ibfdyyj8lvelnmemrr
Plantilla:Nota
10
7
93
92
2018-06-14T17:07:52Z
Kike GL
1
wikitext
text/x-wiki
<p style="color:green;
background-color:#C0FFC0;
border: 1px solid green;
border-radius: 5px;
margin-top: 20px;
padding: 10px;
position: relative;">
<b>Nota:</b> {{{1}}}</p>
<noinclude>
== Como usar nota ==
<p style="float:left;background:Peru;padding:10px;Border:1px solid brown;Border-Radius:5px;"><nowiki>{{nota|Pones tu comentario aqui}}</nowiki></p><p style="clear:both;"> </p>
== Lo que mostrara ==
{{nota|Pones tu comentario aqui}}
<noinclude>
8vrr3u6smtjlgzocfh0lrtzxf9s8ixv
Plantilla:Revisar
10
9
125
105
2018-06-15T00:03:39Z
Kike GL
1
wikitext
text/x-wiki
<p style="color:purple;background-color: #FFCCFF;border: 1px solid purple;border-radius:5px;margin-top:20px;padding:10px;position:relative;">
Este articulo esta por revisar aun !</p>
qk5ptrtdq58d4s9v2wg592jjbjjqqmo
Plantilla:Tip
10
460
4146
4145
2019-06-11T19:28:46Z
Kike GL
2
wikitext
text/x-wiki
<p style="color:black;
background-color:#ffffc0;
border: 1px solid #ffb30f;
border-radius: 5px;
margin-top: 20px;
padding: 10px;
position: relative;">
<b>Tip:</b> {{{1}}}</p>
<noinclude>
== Como usar nota ==
<p style="float:left;background:Peru;padding:10px;Border:1px solid brown;Border-Radius:5px;"><nowiki>{{Tip|Pones tu comentario aqui}}</nowiki></p><p style="clear:both;"> </p>
== Lo que mostrara ==
{{Tip|Pones tu comentario aqui}}
<noinclude>
r383ouuwxi1js965enfms885bxgjdi7
Categoría:Analogico
14
230
997
2018-06-26T18:34:40Z
Kike GL
2
Página creada con «[[Category:Ejemplos]]»
wikitext
text/x-wiki
[[Category:Ejemplos]]
hqrhzqyaiq1e4cirk21mby7ft6cm14l
Categoría:Arduino
14
438
5065
3779
2019-10-13T13:24:31Z
Kike GL
2
wikitext
text/x-wiki
Categoría raiz de ArduWiki. Todas las categorías del proyecto son subcategorías directas o indirectas de ésta.
cgry5t4wlknzc3kcuz3htctr49ecdy6
Categoría:Basicos
14
151
518
2018-06-20T21:57:04Z
Kike GL
2
Página creada con «[[Category:Ejemplos]]»
wikitext
text/x-wiki
[[Category:Ejemplos]]
hqrhzqyaiq1e4cirk21mby7ft6cm14l
Categoría:Caracteres
14
271
1049
2018-06-26T21:27:06Z
Kike GL
2
Página creada con «[[Category:Ejemplos]]»
wikitext
text/x-wiki
[[Category:Ejemplos]]
hqrhzqyaiq1e4cirk21mby7ft6cm14l
Categoría:Comunicaciones
14
243
1013
2018-06-26T21:01:35Z
Kike GL
2
Página creada con «[[Category:Ejemplos]]»
wikitext
text/x-wiki
[[Category:Ejemplos]]
hqrhzqyaiq1e4cirk21mby7ft6cm14l
Categoría:Ejemplo Digital
14
480
4664
2019-07-07T01:01:56Z
Kike GL
2
Página creada con «Aqui van los ejemplos incluidos en el [[IDE]] [[Category:Ejemplos]]»
wikitext
text/x-wiki
Aqui van los ejemplos incluidos en el [[IDE]]
[[Category:Ejemplos]]
qh1ws0oeuulo3gttbaikwbkkazexoz9
Categoría:Ejemplos
14
282
1063
2018-06-26T21:34:40Z
Kike GL
2
Página creada con «[[Category:Arduino]]»
wikitext
text/x-wiki
[[Category:Arduino]]
31em7o58rzde9t7lnwg6lvpa2if1zyr
Categoría:Estructura
14
116
560
311
2018-06-21T15:57:37Z
Kike GL
2
wikitext
text/x-wiki
Los elementos del código Arduino (C ++).
[[Category:Referencias]]
jn5wgg1acb41fmz6x7zff9ur6f4obdx
Categoría:Estructura control
14
440
3806
2019-05-06T23:09:31Z
Kike GL
2
Página creada con «[[Category:Estructura]]»
wikitext
text/x-wiki
[[Category:Estructura]]
d7h5or4j84zq715jjb0zf86sq078qpl
Categoría:Estructuras de control
14
283
1067
2018-06-26T21:41:54Z
Kike GL
2
Página creada con «[[Category:Ejemplos]]»
wikitext
text/x-wiki
[[Category:Ejemplos]]
hqrhzqyaiq1e4cirk21mby7ft6cm14l
Categoría:Funciones
14
11
561
307
2018-06-21T15:58:44Z
Kike GL
2
wikitext
text/x-wiki
Categoría que agrupa a todas la funciones internas en Arduino.
[[Category:Referencias]]
3fk6b0au4h185lb64k3butnso00kggc
Categoría:Funciones bit y byte
14
468
4970
4253
2019-09-26T16:18:55Z
Kike GL
2
wikitext
text/x-wiki
A menudo, cuando se programa en el entorno Arduino, la capacidad de manipular bits individuales será útil o incluso necesaria. Aquí hay algunas situaciones en las que las matemáticas de bits pueden ser útiles:
* Ahorro de memoria al empacar hasta 8 valores de datos verdaderos/falsos en un solo [[byte]].
* Activar/desactivar bits individuales en un registro de control o registro de puerto de hardware.
* Realizar ciertas operaciones aritméticas que implican multiplicar o dividir por potencias de 2.
En este tutorial, primero exploramos los operadores básicos bit a bit disponibles en el lenguaje C++. Luego aprendemos cómo combinarlos para realizar ciertas operaciones útiles comunes.
== Sistema binario ==
Para entender las operaciones binarias es mucho mejor trabajar en numeros binarios. Arduino permite hacer esto:
<pre>
0b11 //3
B11 //3
</pre>
[[Category:Funciones]]
abkl1gxc46cfdey1wm1isygf52n5wzb
Categoría:Funciones caracteres
14
464
4213
2019-06-11T21:26:02Z
Kike GL
2
Página creada con «[[Category:Funciones]]»
wikitext
text/x-wiki
[[Category:Funciones]]
5fwo2g0cy95qblmmzmd4n5lxfxei9mc
Categoría:Funciones conversion
14
465
4227
2019-06-11T21:34:13Z
Kike GL
2
Página creada con «[[Category:Funciones]]»
wikitext
text/x-wiki
[[Category:Funciones]]
5fwo2g0cy95qblmmzmd4n5lxfxei9mc
Categoría:Funciones interrupciones
14
469
4261
2019-06-11T23:09:53Z
Kike GL
2
Página creada con «[[Category:Funciones]]»
wikitext
text/x-wiki
[[Category:Funciones]]
5fwo2g0cy95qblmmzmd4n5lxfxei9mc
Categoría:Funciones matematicas
14
463
4201
2019-06-11T21:19:28Z
Kike GL
2
Página creada con «[[Category:Funciones]]»
wikitext
text/x-wiki
[[Category:Funciones]]
5fwo2g0cy95qblmmzmd4n5lxfxei9mc
Categoría:Funciones pines
14
467
4243
2019-06-11T22:43:38Z
Kike GL
2
Página creada con «[[Category:Funciones]]»
wikitext
text/x-wiki
[[Category:Funciones]]
5fwo2g0cy95qblmmzmd4n5lxfxei9mc
Categoría:Funciones tiempo
14
466
4235
2019-06-11T22:30:45Z
Kike GL
2
Página creada con «[[Category:Funciones]]»
wikitext
text/x-wiki
[[Category:Funciones]]
5fwo2g0cy95qblmmzmd4n5lxfxei9mc
Categoría:Funciones trigonometricas
14
462
4190
2019-06-11T21:13:15Z
Kike GL
2
Página creada con «[[Category:Funciones]]»
wikitext
text/x-wiki
[[Category:Funciones]]
5fwo2g0cy95qblmmzmd4n5lxfxei9mc
Categoría:Libreria Ethernet
14
457
4068
2019-05-30T22:32:40Z
Kike GL
2
Página creada con «[[Category:Librerias]]»
wikitext
text/x-wiki
[[Category:Librerias]]
k8o9klt777n6abmoqabigqm5jispqjo
Categoría:Libreria RTC
14
430
3463
2019-05-06T00:00:00Z
Kike GL
2
Página creada con « [[Category:Librerias]]»
wikitext
text/x-wiki
[[Category:Librerias]]
s5zzeiikczlxmc8oelhou34z3290hw5
Categoría:Libreria SD
14
429
3459
2019-05-05T23:56:42Z
Kike GL
2
Página creada con « [[Category:Librerias]]»
wikitext
text/x-wiki
[[Category:Librerias]]
f76qlwtjp9t3vo9xkh0ydij7hcfis69
Categoría:Libreria Time
14
407
3454
3031
2019-05-05T23:54:43Z
Kike GL
2
wikitext
text/x-wiki
Los temporizadores internos de Arduino son de corto plazo. Pero que hacer cuando requerimos por ejemplo poner fecha y hora en nuestro tabulado de datos de sensores (datalogger) para un análisis posterior ? Estas funciones están disponibles si añades la librería estándar de Arduino TimeLib.h.
Lo primero que hace la librería TimeLib.h es definir un tipo especial de variable que llamamos time_t de 32 bits, que es la base de todo, porque almacena valores de tiempo en un formato especial calculado como el número de segundos transcurridos desde el 1-ENE-1970, llamada fecha Unix.
[[Category:Librerias]]
o39ruwns14rqti7qk0v40khuaca815v
Categoría:Librerias
14
285
5274
4682
2020-03-16T17:10:00Z
Kike GL
2
wikitext
text/x-wiki
El software Arduino ([[IDE]]) se puede ampliar mediante el uso de librerías, al igual que la mayoría de las plataformas de programación, para proporcionar funcionalidad adicional a sus [[boceto]]s (sketches). A continuación listamos las librerías más importantes explicando su funcionamiento.
Además le mostraremos ejemplos de varias librerías que vienen instaladas con el [[IDE]]. Para abrirlas haga clic en el menú de la barra de herramientas: Archivo>Ejemplos.
{{Nota|Antes de usar una libreria, esta se debe instalar de preferencia mediante el Administrador de librerías que se encuentra en el IDE menu: Programa > Incluir Librerias > Administrar Bibliotecas.}}
Existen varios tipos de libreria:
* Partner (12)
* Official (77)
* Recommended (119)
* Contributed (2508)
* Retired (3)
[[Category:Arduino]]
o8rnymajdtlqisuxg5wlrtghktexxby
Categoría:Mouse
14
281
1062
2018-06-26T21:34:01Z
Kike GL
2
Página creada con «[[Category:Ejemplos]]»
wikitext
text/x-wiki
[[Category:Ejemplos]]
hqrhzqyaiq1e4cirk21mby7ft6cm14l
Categoría:Operador
14
470
4389
2019-06-14T23:11:22Z
Kike GL
2
Página creada con «[[Category:Operador]]»
wikitext
text/x-wiki
[[Category:Operador]]
fcweoya3nfnf7o4umfxhha3twgckbew
Categoría:Operador aritmetico
14
439
3797
2019-05-06T23:05:14Z
Kike GL
2
Página creada con «[[Category:Estructura]]»
wikitext
text/x-wiki
[[Category:Estructura]]
d7h5or4j84zq715jjb0zf86sq078qpl
Categoría:Operador aritmetico compuesto
14
495
5006
2019-09-26T23:55:48Z
Kike GL
2
Página creada con «[[Category:Estructura]]»
wikitext
text/x-wiki
[[Category:Estructura]]
d7h5or4j84zq715jjb0zf86sq078qpl
Categoría:Operador bit a bit
14
441
3824
2019-05-06T23:17:57Z
Kike GL
2
Página creada con «[[Category:Estructura]]»
wikitext
text/x-wiki
[[Category:Estructura]]
d7h5or4j84zq715jjb0zf86sq078qpl
Categoría:Operador bit a bit compuesto
14
496
5019
2019-09-27T00:02:32Z
Kike GL
2
Página creada con «[[Category:Estructura]]»
wikitext
text/x-wiki
[[Category:Estructura]]
d7h5or4j84zq715jjb0zf86sq078qpl
Categoría:Operador comparador
14
494
5004
2019-09-26T23:54:16Z
Kike GL
2
Página creada con «[[Category:Estructura]]»
wikitext
text/x-wiki
[[Category:Estructura]]
d7h5or4j84zq715jjb0zf86sq078qpl
Categoría:Operador logico
14
442
3830
2019-05-06T23:21:34Z
Kike GL
2
Página creada con «[[Category:Estructura]]»
wikitext
text/x-wiki
[[Category:Estructura]]
d7h5or4j84zq715jjb0zf86sq078qpl
Categoría:Palabras reservadas
14
436
3696
2019-05-06T19:02:09Z
Kike GL
2
Página creada con «[[Category:Variables]]»
wikitext
text/x-wiki
[[Category:Variables]]
renp5md2l7iavfspf1fpp0th1jeaolx
Categoría:Pantalla
14
252
1027
2018-06-26T21:16:08Z
Kike GL
2
Página creada con «[[Category:Ejemplos]]»
wikitext
text/x-wiki
[[Category:Ejemplos]]
hqrhzqyaiq1e4cirk21mby7ft6cm14l
Categoría:Placas
14
461
4662
4160
2019-07-07T00:55:02Z
Kike GL
2
wikitext
text/x-wiki
Aqui las placas Arduino disponibles
[[Category:Arduino]]
ka8h0swtuggjwel5to7c8shs43u93sq
Categoría:Referencias
14
118
1064
303
2018-06-26T21:36:04Z
Kike GL
2
wikitext
text/x-wiki
El lenguaje de programación de Arduino se puede dividir en tres grandes partes: estructura, valores (variables y constantes), y funciones.
[[Category:Arduino]]
ko0tts3ty8cnkbgskv05q1ahiml0zgb
Categoría:Sensores
14
257
1033
2018-06-26T21:19:55Z
Kike GL
2
Página creada con «[[Category:Ejemplos]]»
wikitext
text/x-wiki
[[Category:Ejemplos]]
hqrhzqyaiq1e4cirk21mby7ft6cm14l
Categoría:Serial
14
432
3500
2019-05-06T17:22:16Z
Kike GL
2
Página creada con «[[Category:Funciones]]»
wikitext
text/x-wiki
[[Category:Funciones]]
5fwo2g0cy95qblmmzmd4n5lxfxei9mc
Categoría:Stream
14
433
3540
2019-05-06T17:43:15Z
Kike GL
2
Página creada con «[[Category:Funciones]]»
wikitext
text/x-wiki
[[Category:Funciones]]
5fwo2g0cy95qblmmzmd4n5lxfxei9mc
Categoría:String
14
434
3589
2019-05-06T18:02:37Z
Kike GL
2
Página creada con «[[Category:Funciones]]»
wikitext
text/x-wiki
[[Category:Funciones]]
5fwo2g0cy95qblmmzmd4n5lxfxei9mc
Categoría:Teclado
14
278
1056
2018-06-26T21:30:36Z
Kike GL
2
Página creada con «[[Category:Ejemplos]]»
wikitext
text/x-wiki
[[Category:Ejemplos]]
hqrhzqyaiq1e4cirk21mby7ft6cm14l
Categoría:Tipo dato
14
435
3670
2019-05-06T18:37:09Z
Kike GL
2
Página creada con «[[Category:Variables]]»
wikitext
text/x-wiki
[[Category:Variables]]
renp5md2l7iavfspf1fpp0th1jeaolx
Categoría:Tips
14
373
2039
2038
2018-07-15T16:49:06Z
Kike GL
2
wikitext
text/x-wiki
[[Category:Estructura]]
d7h5or4j84zq715jjb0zf86sq078qpl
Categoría:Variables
14
117
562
308
2018-06-21T15:59:18Z
Kike GL
2
wikitext
text/x-wiki
Tipos de datos en Arduino y constantes.
[[Category:Referencias]]
oixiky8qv32enb9ddjm09lqm8vrc4v4
Categoría:memoria
14
437
4795
3766
2019-07-18T16:59:18Z
Kike GL
2
wikitext
text/x-wiki
[[Category:Placas]]
gwm16mzxht51o543b9zlbs6vsqfcxmo